You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

docker-compose如何将.env文件中的环境变量传递给Dockerfile使用?

问题原因

Docker 构建规则中,ARG 变量默认的作用域是其声明位置之后的当前构建阶段。如果要在 FROM 行使用变量定义镜像标签,必须将对应 ARG 声明放在所有 FROM 指令的最前面,否则 FROM 行无法读取到传入的变量值,就会出现镜像标签为空的格式错误。

解决方法

修改你的 Dockerfile,在首行添加 NGINX_VERSION 的前置声明即可,修改后的完整 Dockerfile 如下:

# 前置声明ARG,作用于后续所有FROM行
ARG NGINX_VERSION
FROM nginx:${NGINX_VERSION}

RUN apt-get update \
  && apt-get -y install openssl \
  && apt-get -y install vim

RUN mkdir -p /etc/openssl/certs
RUN mkdir -p /etc/nginx/snippets
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/openssl/nginx-selfsigned.key -out /etc/openssl/nginx-selfsigned.crt -subj "/C=US/ST=NY/L=NY/O=ACME/OU=CD/CN=WPDeveloper"

你现有的 docker-compose.yml 配置、.env 文件均不需要改动,重新执行构建命令即可正常运行。

补充说明

如果后续你在Dockerfile中添加了多阶段构建,其他阶段需要用到NGINX_VERSION变量的话,只需要在对应阶段内再次声明ARG NGINX_VERSION即可,不需要重复赋值,会自动继承前置声明的变量值。

内容的提问来源于stack exchange,提问作者dot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:05