使用phusion/baseimage构建Docker镜像时如何读取构建时环境变量
Docker构建时正确读取.env环境变量的解决方案
你当前的问题核心是:docker build --build-arg ENV_FILE=.env仅将ENV_FILE作为单个构建参数传递给Dockerfile,但Docker不会自动解析该.env文件并导入其中的变量。而你的Dockerfile仅声明了ARG VAR1,未获取到VAR1的实际值,因此打印为空。
以下是两种可行的解决方案:
方案一:手动传递单个构建参数
直接在构建命令中指定.env里的变量,让Dockerfile的ARG指令能接收到对应值:
方式1:命令中直接指定变量值
docker build --build-arg VAR1=foo --build-arg VAR2=bar -t demo:latest .
方式2:从.env文件读取后传递
避免硬编码值,用shell命令先导出.env中的变量再传递:
export $(cat .env | xargs) && docker build --build-arg VAR1=$VAR1 --build-arg VAR2=$VAR2 -t demo:latest .
方案二:在Dockerfile中直接加载.env文件
将.env文件复制到构建上下文,在构建阶段加载并使用其中的变量:
修改后的Dockerfile:
FROM phusion/baseimage:jammy-1.0.1 # 将.env文件复制到镜像临时目录 COPY .env /tmp/.env # 加载.env变量并执行打印命令 # set -a 自动导出后续环境变量,确保source后的VAR1能在echo中生效 RUN set -a && source /tmp/.env && set +a && echo "my var1 equals to : $VAR1"
对应的构建命令无需传递ENV_FILE参数,直接执行:
docker build -t demo:latest .
内容的提问来源于stack exchange,提问作者medBouzid
相关产品推荐
相关产品推荐

