【Google】Androidアプリで外部アカウント識別子に設定した値をAPIから取得する
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)
(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 で実行していたのが引っかかるようになってしまったのでしょうか。