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

如何通过docker-compose.yml的env_file向Dockerfile传递环境变量?

问题

希望将环境变量从docker-compose.yml传递至Dockerfile的构建阶段,现有配置如下:

docker-compose.yml

version: '3.8'

services:
  app:
    container_name: app-container
    image: app:latest
    build:
      context: ./
      dockerfile: Dockerfile
    env_file: # Interpolation source files
      - ./env 

.env

PORT=3000

Dockerfile

FROM node:16

RUN echo ${PORT} # Output should be '3000'

需求:通过.env文件统一管理配置,避免使用ARG,询问是否有可行方案。

可行方案

直接通过env_file定义的变量无法在Docker构建阶段(RUN指令执行时)获取,因为env_file是给容器运行阶段设置的环境变量。要在构建阶段不用ARG就能拿到.env里的变量,可以通过以下步骤实现:

  • 修改Dockerfile:将.env文件复制到镜像中,在执行RUN命令前先加载这个文件的环境变量

    FROM node:16
    
    # 复制.env文件到镜像内
    COPY .env .env
    # 加载.env并执行命令
    RUN source .env && echo $PORT
    
  • 无需修改docker-compose.yml:当前配置的build.context已经设为./,.env会被包含在构建上下文中,直接构建即可。

注意事项

  • 如果.env包含敏感信息,构建完成后建议在镜像内删除该文件:
    FROM node:16
    
    COPY .env .env
    RUN source .env && echo $PORT && rm .env
    
  • 若使用alpine等默认shell为sh的基础镜像,需用. .env替代source .env来加载环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:16:05