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

Windows环境下Docker读取环境变量失败致容器启动异常

问题:Windows下Docker容器内Node应用无法读取docker-compose环境变量

同一容器内的两个应用均从docker-compose.yml读取环境变量,Linux环境启动正常,但Windows环境中其中一个应用加载环境变量失败,报错显示NATS连接URL参数全为undefined。尽管Docker Desktop的Inspect窗口显示环境变量已存在,修改环境变量引号格式也未能解决问题,推测是Linux与Windows的格式差异导致。

错误日志

internal/url.js:243
  throw error;
  ^

TypeError [ERR_INVALID_URL]: Invalid URL: nats://undefined:undefined@undefined:undefined
    at onParseError (internal/url.js:241:17)
    at new URL (internal/url.js:319:5)
    at Client.parseOptions (/opt/node_app/node_modules/nats/lib/nats.js:428:34)
    at new Client (/opt/node_app/node_modules/nats/lib/nats.js:221:8)
    at Object.exports.connect (/opt/node_app/node_modules/nats/lib/nats.js:250:10)
    at Object.<anonymous> (/opt/node_app/lib/nats.js:6:19)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! ms_template@1.0.0 start: `cross-env node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the ms_template@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

docker-compose环境变量配置

environment:
      server_user: "user"
      server_pass: "pass"
      server_port: 1234
      server_ip: nats
      node_env: production
      api_host: http://localhost:1234/api
      node_tls_reject_unauthorized: 0

解决方案

  • 修正环境变量读取方式:Windows环境下,Docker Compose传递的环境变量名会被转为全大写,Node应用中需用process.env.SERVER_USER这类全大写的键名读取,而非原配置中的小写下划线格式(如process.env.server_user)。
  • 统一文件换行格式:将docker-compose.yml文件的换行符从CRLF(Windows)改为LF(Linux),可通过VS Code等编辑器右下角的换行符切换功能实现。
  • 改用.env文件管理变量:把环境变量写入.env文件,在docker-compose.yml中通过env_file: .env引用,避免跨平台格式问题。示例:
    .env文件内容:
    SERVER_USER=user
    SERVER_PASS=pass
    SERVER_PORT=1234
    SERVER_IP=nats
    NODE_ENV=production
    API_HOST=http://localhost:1234/api
    NODE_TLS_REJECT_UNAUTHORIZED=0
    
    docker-compose.yml中配置:
    env_file: .env
    
  • 验证环境变量传递:在Node应用中添加console.log(process.env)代码,启动后查看输出,确认环境变量是否真的被容器接收,定位是读取问题还是传递问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:24