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
相关产品推荐
相关产品推荐

