Docker build命令--build-arg参数嵌套赋值可行性及实现方法问询
可以实现!这里给你两种可行的方案
你的问题出在shell的变量解析优先级上:当你在命令行写--build-arg arg2=${arg1}时,你的本地shell会先尝试解析${arg1}——而此时你的shell环境里并没有定义arg1这个变量,所以它会被替换成空字符串,最终传给Docker的arg2就是空的,这才导致输出是abc 。
下面是两种解决思路:
方案1:在Dockerfile中关联ARG的默认值
把arg2的默认值设置为arg1,这样当你不传arg2时,它会自动继承arg1的值:
ARG arg1 ARG arg2=$arg1 # 让arg2默认使用arg1的值 RUN echo "$arg1 $arg2"
然后构建命令只需要传入arg1即可:
docker build --build-arg arg1=abc .
这样构建时,arg2会自动使用arg1的abc值,最终输出就是abc abc。
方案2:在shell层面传递相同的值
如果你一定要在命令行同时传递两个参数,那需要先在你的shell环境中定义arg1变量,再把它传给两个--build-arg:
# 先在shell里定义变量 arg1=abc # 再传递给Docker构建命令 docker build --build-arg arg1=$arg1 --build-arg arg2=$arg1 .
这样shell会把两个$arg1都替换成abc,Docker收到的两个参数都是abc,输出自然符合预期。
两种方案各有适用场景:方案1更适合把参数关联逻辑固化在Dockerfile里,减少构建命令的复杂度;方案2则更灵活,适合需要临时调整参数的场景。
内容的提问来源于stack exchange,提问作者Jan Nowak
相关产品推荐
相关产品推荐

