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

Node.js容器读取docker-compose配置的环境变量返回undefined问题排查

解决方案

1. 清理旧容器后重新启动

修改docker-compose配置后直接执行docker-compose up会复用之前创建的旧容器,旧容器不会加载新的环境变量配置,优先执行以下命令重启服务:

docker-compose down && docker-compose up

如果需要同步重新构建镜像,可添加--build参数:

docker-compose down && docker-compose up --build

2. 检查dotenv依赖配置

如果你的Node项目引入了dotenv包加载本地环境变量,当你开启了override选项时(如代码中写了require('dotenv').config({ override: true })),dotenv会用本地.env文件的变量覆盖docker-compose传入的系统环境变量。如果本地.env文件没有声明REDIS_HOST和TEST两个变量,覆盖后这两个值就会变成undefined。

解决方法:

  • 去掉dotenv配置里的override: true参数
  • 或在本地.env文件中补上对应的变量值
  • 或将docker-compose中定义的环境变量同步写到项目的.env文件里

3. 检查启动脚本配置

查看package.json中dev脚本的配置,确认是否使用了会重置环境变量的工具:

  • 如果使用pm2等进程管理工具启动项目,这类工具默认会隔离环境变量,需要额外在配置文件中添加env配置项,或启动时添加--env参数传递环境变量。

4. 验证环境变量注入状态

可以直接进入运行的api容器,打印系统环境变量确认是否注入成功:

docker-compose exec api env
  • 如果执行后能看到REDIS_HOST=redis://redis:6379和TEST=123的输出,说明docker-compose配置没问题,问题出在Node项目的代码或者启动逻辑中
  • 如果看不到这两个变量,说明docker-compose配置未生效,可检查是否有语法缩进错误,或docker版本是否兼容当前compose文件的语法版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:57:02