次のDockerfileがあります。
FROM node:alpine
ENV HUGO_VERSION 0.26
ENV HUGO_BINARY hugo_${HUGO_VERSION}_linux-64bit
# Install node
RUN apk add --update \
git py-pygments tar \
&& rm -rf /var/cache/apk/*
# Download and Install hugo
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}.tar.gz /tmp/${HUGO_BINARY}.tar.gz
RUN tar xzf /tmp/${HUGO_BINARY}.tar.gz -C /usr/local/bin/ \
&& rm /tmp/${HUGO_BINARY}.tar.gz
わかりました:
tar (child): /tmp/hugo_0.26_linux-64bit.tar.gz: Cannot open: No such file or directory
同じ問題があるStackExchangeスレッドを見つけて理解しました。Docker 追加ドキュメントそれ
ADD ../something /something
最初のステップは、docker build
コンテキストディレクトリ(およびサブディレクトリ)をdockerデーモンに送信することであるため、そうすることはできません。
でも何度も注意深く読んでみると悟りました。
<src>
URLで末尾のスラッシュで終わらない場合は、<dest>
ファイルがURLからダウンロードされてコピーされます<dest>
。
<src>
URLで末尾のスラッシュで終わる場合、<dest>
ファイル名はURLから推測され、ファイルはにダウンロードされます<dest>/<filename>
。
私の場合、末尾のスラッシュはありません。<src>
このように/tmp/
設定しました。
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}.tar.gz /tmp/
RUN tar xzf /tmp/${HUGO_BINARY}.tar.gz -C /usr/local/bin/ \
&& rm /tmp/${HUGO_BINARY}.tar.gz
私は持っています:
tar (child): /tmp/hugo_0.26_linux-64bit.tar.gz: Cannot open: No such file or directory
混乱しています。私が逃したものは何ですか?私はmacOS 10.12.6を使用しています。
Docker version 17.06.0-ce, build 02c1d87
docker-compose version 1.14.0, build c7bdf9e
docker-machine version 0.12.0, build 45c69ad
答え1
ls -Rlh /tmp
tarの前に1つを追加するようにDockerfileを変更し、次のことを確認しました。
Step 5/5 : RUN ls -Rlh /tmp/ && tar xzf /tmp/${HUGO_BINARY}.tar.gz -C /usr/local/bin/ && rm /tmp/${HUGO_BINARY}.tar.gz
---> Running in deea1f3a4b1a
/tmp/:
total 4
drwxr-xr-x 2 root root 4.0K Aug 10 05:25 hugo_0.26_linux-64bit.tar.gz
/tmp/hugo_0.26_linux-64bit.tar.gz:
total 11976
-rw-r--r-- 1 root root 10.2K Jun 17 08:06 LICENSE.md
-rw-r--r-- 1 root root 6.2K Jul 18 08:50 README.md
-rwxr-xr-x 1 root root 11.7M Aug 7 07:09 hugo
だからDockerはファイルがtarballであることを認識し、それを抽出するようです。おそらく次のようにすることができます:
# Download and Install hugo
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}.tar.gz /usr/local/bin/
これは私に次のことを与えます:
Step 5/5 : RUN ls -Rlh /usr/local/bin/
---> Running in 6f6cabfbbde8
/usr/local/bin/:
total 47596
-rw-r--r-- 1 root root 10.2K Jun 17 08:06 LICENSE.md
-rw-r--r-- 1 root root 6.2K Jul 18 08:50 README.md
-rwxr-xr-x 1 root root 11.7M Aug 7 07:09 hugo
-rwxr-xr-x 1 root root 34.8M Jul 21 18:20 node
lrwxrwxrwx 1 root root 38 Jul 21 18:20 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 root root 38 Jul 21 18:20 npx -> ../lib/node_modules/npm/bin/npx-cli.js
lrwxrwxrwx 1 root root 18 Jul 21 18:21 yarn -> /opt/yarn/bin/yarn
lrwxrwxrwx 1 root root 18 Jul 21 18:21 yarnpkg -> /opt/yarn/bin/yarn
これは文書と矛盾するようです。
- もし
<src>
あれば地元のtarは、認識された圧縮形式(identity、gzip、bzip2、またはxz)でアーカイブしてからディレクトリに抽出します。リソースは以下で提供されます。離れてURLは解凍されません。