要旨
Dockerfile
には、FROM
より前の段階でARG
を置くことができるFROM
より後の段階でそのビルド引数を使用したければ、再度宣言が必要
詳細
下記記事より。
# Dockerfile # 使用するDebianのバージョンを固定 ARG DEBIAN_CODENAME=bullseye # 使用するRubyのバージョンを固定 ARG RUBY_VERSION=3.1.2 FROM ruby:${RUBY_VERSION?}-${DEBIAN_CODENAME?} (中略) ARG DEBIAN_CODENAME ARG RUBY_VERSION
一般的に、Dockerfile
はFROM
で始めることが多い。ただし、ARG
を先に置くこともできる。
今回の用法がまさにそれで、使用するイメージのタグをビルド引数として与えるようなときに使用できる。
1点注意が必要で、 FROM
より前に宣言したARG
は、ビルドステージの外にあるため、FROM
より後で再利用したい場合は、再度宣言しない限り使えない1。上記の例だと、ARG DEBIAN_CODENAME
ARG RUBY_VERSION
が該当する。
根拠
An
ARG
declared before aFROM
is outside of a build stage, so it can’t be used in any instruction after aFROM
. To use the default value of anARG
declared before the firstFROM
use anARG
instruction without a value inside of a build stage:https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact