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

Docker Compose无法读取.env文件 环境变量未传入容器问题求助

问题原因

Docker Compose 存在两类环境变量加载逻辑,你混淆了二者的作用范围:

  • env_file 配置的作用是将指定文件内的变量直接注入到运行的容器内部,不会用来解析 Compose 文件里的 ${变量名} 占位符
  • Compose 解析配置文件中的 ${变量名} 占位符时,默认只会读取当前目录下命名为 .env 的文件,你自定义命名的 .env.dev 不会被自动加载用来解析占位符

你当前配置里同时写了 environment 和 env_file,environment 里的 ${RUN_MIGRATIONS_ON_START} 因为 Compose 没有读取 .env.dev 找不到对应值,所以最终传入容器的就是空值。另外你主 Compose 文件里的 build 后面少了冒号,属于语法错误,需要先修正为 build:。

解决方法

你可以根据自己的使用场景二选一:

方法1:需要在 Compose 层面使用变量做逻辑判断/占位符替换

启动 Compose 时手动指定加载 .env.dev 文件,用来解析配置里的占位符:

docker compose --env-file .env.dev up -d

该方式下你原有配置无需修改,启动后变量会正常传入容器。

方法2:仅需要把变量传入容器,无需在 Compose 层面使用变量

直接删除覆盖文件里的 environment 配置段即可:

version: '3.4'
services:
  web:
    env_file:
      - .env.dev

env_file 会自动把 .env.dev 里定义的所有变量注入到容器内,不需要在 environment 里重复声明。

补充说明

如果你需要在 Dockerfile 构建阶段(比如 RUN 指令执行时)用到这些变量,那么上述两种方法都不生效,因为 env_file 和 environment 都是容器运行时的变量,构建阶段不可见。你需要将变量配置到 build.args 中,示例:

services:
  web:
    build:
      context: .
      args:
        - RUN_MIGRATIONS_ON_START=${RUN_MIGRATIONS_ON_START}

同时在 Dockerfile 中用 ARG 指令声明对应变量,构建时同样需要指定 --env-file .env.dev 参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:45:03