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

