1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Dockerfile] FROMよりも前に記載したARGが有効にならなかった

Last updated at Posted at 2021-08-07

ダメなパターン

こんな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が使えていないことがわかる。

対策

ARGFROMよりも後に記載する。

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]で変数が展開されないとき

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?