Docker ARG 棘手的行为

Docker ARG tricky behavior

Docker 构建棘手的行为:

Docker文件

ARG php_version="7.2" 
ARG flavor="stretch" 

FROM php:${php_version}-fpm-${flavor} 

#ARG php_version="7.2" 
ENV php_v $php_version 
CMD echo $php_v

如果你构建它并且 运行:

docker build -t args:1.0 .
docker run -it --name testargs args:1.0

输出为空字符串而不是预期的“7.2”

但是如果第三行 ARG 没有注释,我们得到“7.2”

为什么会这样?

Dockerfile 中的每个 FROM 代表一个新的构建阶段,并且在 FROM 之前声明的 ARG 不可用于从另一个 [=10] 开始的较新的构建阶段=].

引用doc的相关部分:

An ARG declared before a FROM is outside of a build stage, so it can’t be used in any instruction after a FROM.