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

容器中Node.js v22原生环境变量加载失败问题排查

解决容器中Node.js原生加载.env文件失败的问题

问题根源

  1. 路径无效:代码中../../.env的相对路径在容器环境不成立——容器工作目录为/app,server.js位于/app/server/,../../指向容器中不存在的上级目录。
  2. 文件未复制:Docker构建上下文设为backend目录,根目录的.env未被复制到容器内。
  3. 重复操作:docker-compose.yml已通过env_file注入环境变量,代码手动加载属于冗余操作。

解决方案1:移除代码中的手动加载(推荐)

利用docker-compose的env_file配置,环境变量会自动注入容器,无需在代码中手动加载.env文件。

修改server.js,删除以下代码行:

process.loadEnvFile('../../.env')

直接通过process.env.NODE_LOCAL_PORT读取环境变量即可。


解决方案2:保留原生loadEnvFile的配置调整

如果坚持使用Node.js原生加载方法,需确保.env文件被正确复制到容器并修正路径:

步骤1:调整Docker构建上下文

修改docker-compose.yml的构建配置,将上下文改为项目根目录,让Docker能访问到根目录的.env:

services:
  server:
    build:
      context: ./  # 改为项目根目录
      dockerfile: backend/Dockerfile
    # 其余配置保持不变

步骤2:修改Dockerfile复制.env文件

在backend/Dockerfile中添加复制.env的步骤:

# 复制根目录的.env到容器工作目录
COPY .env ./

# 其余指令保持不变

步骤3:修正代码中的路径

容器中.env位于/app目录,server.js在/app/server/,调整加载路径:

// 方法1:默认加载当前工作目录(/app)的.env
process.loadEnvFile()

// 方法2:明确指定相对路径
process.loadEnvFile('../.env')

验证

执行docker-compose up --build,服务应正常启动,不再出现ENOENT错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:09:59