为什么Dockerfile的build-arg作为ENV使用时无法正常生效?
问题原因
Dockerfile 中,在 FROM 关键字之前定义的 ARG 变量,作用域仅局限于所有 FROM 指令本身,无法直接在 FROM 之后的构建阶段中使用。你定义在首行的 ARG VER=INVALID 只能用来解析 FROM python:${VER} 行的基础镜像标签,进入 python 基础镜像对应的构建阶段后,该 ARG 就已经失效,因此后续 ENV VERSION ${VER} 拿到的 VER 是空值,最终运行时环境变量 VERSION 自然为空。
解决方法
只需要在 FROM 之后重新声明需要复用的 ARG 变量即可,修改后的 Dockerfile 如下:
ARG VER=INVALID FROM python:${VER} # 重新声明ARG,继承构建时传入的参数值 ARG VER ENV VERSION ${VER} CMD ["/bin/bash", "-c", "echo VERSION = $VERSION"]
原构建命令无需修改,仍使用:
sudo docker build --tag teste --build-arg VER=3 .
重新构建后运行镜像,就能正常输出 VERSION = 3。
内容的提问来源于stack exchange,提问作者Beto Neto
相关产品推荐
相关产品推荐

