LoginSignup
0
0

More than 1 year has passed since last update.

DockerfileのARGをFROMを越えて引き継ぐ

Last updated at Posted at 2022-07-07

以下のようなDockerfileを作った。

ARG VERSION=latest

FROM busybox:$VERSION

RUN echo $VERSION > /opt/image_version

# ...

/opt/ubuntu_version には latest が書き込まれることを期待したが実際には空。

なんでだーと思ったらちゃんと公式ドキュメントに書いてある。

An ARG declared before a FROM is outside of a build stage, so it can’t be used in any instruction after a FROM. To use the default value of an ARG declared before the first FROM use an ARG instruction without a value inside of a build stage:

意訳。

FROMより前に定義されたARGはビルドステージ外にあります。よって(FROM以降は別のビルドステージになるため)FROM以降はARGを使うことはできません。
FROMより前に定義されたARGのデフォルト値を使えるようにするには、ビルドステージの中でARGを使ってください。このとき、ARGにはデフォルト値を指定しないでください。

FROM以降はARGがリセットされるようなイメージなのかな。
だから$VERSIONで参照しても定義されていないから空文字が出力される。

FROM以降で改めてARG VERSIONを定義すればいいらしい。

ARG VERSION=latest

FROM busybox:$VERSION

# これ❗
ARG VERSION

RUN echo $VERSION > /opt/image_version

# ...

こうすると /opt/ubuntu_version には latest が書き込まれる。

よかったよかった。

0
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
0
0