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

Windows系统下Docker Compose的--env-file选项无法正常工作

问题

按照Docker官方指南使用--env-file选项从命令行导入环境变量,但始终无法成功。

我的compose.yaml文件内容如下:

services:
  test:
    image: ubuntu
    command: printenv
    environment:
      - my_var1=val1

同一目录下有一个.env文件,内容为:

my_var2=val2

执行命令docker compose --env-file .env up后,仅打印出my_var1=val1以及系统默认的PATH、HOSTNAME、HOME变量,.env文件中的my_var2并未被输出。

但如果在compose文件中配置env_file: .env,则my_var2=val2会被正常打印。

已在PowerShell、Cmd和GitBash中进行测试,结果一致。请问这是什么原因?是否是Docker的bug?

环境信息:

  • Docker Compose version v2.10.2
  • Docker version 20.10.17, build 100c701
  • PSVersion 5.1.19041.2673
  • GNU bash, version 5.1.16(1)-release (x86_64-pc-msys)
  • Microsoft Windows 22H2

原因与解决方法

这不是Docker的bug,核心是你混淆了两个env-file相关功能的作用:

  1. 命令行参数--env-file:它是给Docker Compose工具本身提供环境变量的,用于替换Compose文件中的变量占位符(比如${VAR_NAME}),不会直接把变量注入到容器里。你当前的compose.yaml里没有使用任何占位符,所以.env里的my_var2不会被传递给容器。
  2. Compose配置项env_file:这个才是用来把指定文件中的环境变量直接加载到容器内部的配置,所以配置后my_var2能正常打印。

如果想通过命令行实现注入容器环境变量的需求,有两种可行方式:

  • 方式一:修改compose.yaml,用占位符引用变量,再通过--env-file传递值:
    services:
      test:
        image: ubuntu
        command: printenv
        environment:
          - my_var1=val1
          - my_var2=${my_var2}
    
    执行docker compose --env-file .env up,此时--env-file里的my_var2会替换占位符,传递给容器。
  • 方式二:不修改Compose文件,直接用run命令临时指定容器的环境变量文件:
    docker compose run --env-file .env test printenv
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:14:52