技術系TIPS
PR

tar実行時のエラー Cannot change ownership to uid 999, gid 999: Invalid argument の対処方法

saratogax
記事内に商品プロモーションを含む場合があります

Docker ファイル内のシェルコマンド実行で突然のエラー。

どうやら、特定のファイル(*.tar.gz)をダウンロードして tar で解凍している箇所のようです。

file1: Cannot change ownership to uid 999, gid 999: Invalid argument
tar: file2: Cannot change ownership to uid 999, gid 999: Invalid argument
tar: directory: Cannot change ownership to uid 999, gid 999: Invalid argument
tar: Exiting with failure status due to previous errors

1 ヶ月くらい前まではなんともなかったのにな・・・。

今回は、この問題を解決したので紹介していきます。

エラーとなった箇所のコマンド

Docker ファイルでは、なるべく 1 つの RUN コマンドで済ませようと、シェルのコマンドを連続して定義しています。

以下は一部抜粋したもの。

今回は、この 3 行目の tar コマンド実行時にエラーが発生したと思われます。

RUN apt-get update && apt-get install -y --no-install-recommends \
    && cd /tmp/ && wget -q https://github.com/hoge.tar.gz \
    && tar xvfz hoge.tar.gz && mv hoge /usr/local/bin/ && rm /tmp/hoge.tar.gz

エラーの原因

エラーの詳しい原因まではわからないですが、Docker のイメージの OS(ディストリビューション)に何か変更が入ったのか、apt-get で取得したパッケージのバージョンが影響したのか。

まずはパーミッションなど、権限周りを疑いながら調査を進めましょうか。

最初に見つけて気になったが、以下の tar コマンドのオプション(–no-same-owner)

–no-same-owner

(x mode only) Do not extract owner and group IDs. This is the reverse of –same-owner and the default behavior

if tar is run as non-root.

結果的に、このオプション指定でエラーが回避できました。

RUN apt-get update && apt-get install -y --no-install-recommends \
    && cd /tmp/ && wget -q https://github.com/hoge.tar.gz \
    && tar xvfz hoge.tar.gz --no-same-owner && mv hoge /usr/local/bin/ && rm /tmp/hoge.tar.gz

rootless な Docker じゃなく、tar を root で実行していたのが引っかかるようになってしまったのでしょうか。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました