ダメなパターン
こんなdocker-compose.yml
があったとして、
docker-compose.yml
version: "3.0"
services:
python:
build:
context: .
args:
SMILE: o(^ワ^*)o
以下のようにARGを指定するとダメ。
Dockerfile
# ARGが、FROMよりも上に書いてある!!!
ARG SMILE
FROM python:3.8.1
RUN echo "SMILE: ${SMILE}"
このようなDockerfileだと、
bash
$ docker-compose build
Building python
Step 1/3 : ARG SMILE
Step 2/3 : FROM python:3.8.1
---> efdecc2e377a
Step 3/3 : RUN echo "SMILE: ${SMILE}"
---> Running in 522ab58c9bac
SMILE:
Removing intermediate container 522ab58c9bac
---> 64687fd42d90
Successfully built 64687fd42d90
Successfully tagged docker-sample_python:latest
上記の通り SMILE:
しか表示されず、ARG
が使えていないことがわかる。
対策
ARG
はFROM
よりも後に記載する。
Dockerfile
FROM python:3.8.1
# ARGはFROMよりも下に記載する!!!!!
ARG SMILE
RUN echo "SMILE: ${SMILE}"
こうすると、
bash
$ docker-compose build
Building python
Step 1/3 : FROM python:3.8.1
---> efdecc2e377a
Step 2/3 : ARG SMILE
---> Using cache
---> da3cf9ae6c2f
Step 3/3 : RUN echo "SMILE: ${SMILE}"
---> Running in 36276236b609
SMILE: o(^ワ^*)o
Removing intermediate container 36276236b609
---> 31d8eae73c0b
Successfully built 31d8eae73c0b
Successfully tagged docker-sample_python:latest
SMILE: o(^ワ^*)o
と表示されてますねo(^ワ^*)o
ひとこと
「あの~、この問題の対処と理解が終わるまで、5時間以上かかったんですけど~」
「それが今のお前の実力だ。」
「(´;ω;`)ブワッ」
|・`ω・´)チラリッ みなさんのお役に立てれば嬉しいです!
参考にした記事
今回の問題には直接の関係はなかったのですが、ARG
について非常に勉強になったので、特に学習に有用と感じたサイトを掲載しておきます。
1. ARGそのものについて
2. ENVとARGの違いについて
3. [RUN]が関係するときの動作について
4. docker build時にARGのcacheが有効になるかどうかについて
5. [CMD]で変数が展開されないとき