Linux环境下Docker Compose部署Node-RED遇curl连接重置问题
Node-RED容器启动后curl访问提示连接重置的问题排查与解决
核心问题分析
从日志和配置来看,存在几个关键冲突导致无法正常访问:
- 端口映射与容器内部监听端口不匹配
容器日志显示Node-RED在内部监听127.0.0.1:1886,但docker-compose的端口映射是${PORT}:1880(宿主机1886→容器1880),端口完全不对应,导致请求无法正确转发。原因是你用自定义PORT变量指定端口,但Node-RED官方容器需通过NODE_RED_PORT环境变量定义内部监听端口。 - 容器内部监听地址限制
Node-RED监听127.0.0.1(容器回环地址),仅容器内部可访问,宿主机无法通过容器网络连接,必须改为监听0.0.0.0才能对外暴露。 - .env文件格式错误
多个变量写在同一行会导致docker-compose解析失败,需每个变量单独占一行。
分步解决方案
1. 修正.env文件格式
将.env内容调整为每行一个变量:
ABCD=99966 EFGH=128 PORT=1886 NODE_RED_CREDENTIAL_SECRET='d7fdsiufhweiu23901ds'
2. 调整docker-compose.yml配置
修改环境变量和端口映射,确保内部端口与监听地址正确:
version: "3.7" services: node-red: image: nodered/node-red:latest environment: ABCD: "${ABCD}" EFGH: "${EFGH}" # 使用官方环境变量指定内部监听端口 NODE_RED_PORT: "${PORT}" # 强制监听所有地址,允许外部访问 NODE_RED_HOST: "0.0.0.0" NODE_RED_CREDENTIAL_SECRET: "${NODE_RED_CREDENTIAL_SECRET}" ports: # 宿主机端口与容器内部端口保持一致 - "${PORT}:${PORT}" volumes: - ./XYZ/${ABCD}/${EFGH}:/data
若自定义
settings.js已配置uiHost和uiPort,需确保配置与环境变量一致,优先以settings.js为准。
3. 检查settings.js身份验证配置
由于使用token身份验证,需确认:
httpNodeOptions或httpAdminOptions未限制监听地址为127.0.0.1- token验证逻辑正确,未直接拒绝未携带token的请求(正常应返回401或登录页面,而非连接重置)
4. 重启容器并验证
执行命令重启容器:
docker-compose -f XYZ/docker-compose.yml --env-file XYZ/99966/128/.env -p projectname down docker-compose -f XYZ/docker-compose.yml --env-file XYZ/99966/128/.env -p projectname up -d
查看容器日志,确认显示:
[info] Server now running at http://0.0.0.0:1886/
再执行curl测试:
curl http://127.0.0.1:1886/
若配置了token验证,需携带token请求:
curl -H "Authorization: Bearer YOUR_TOKEN" http://127.0.0.1:1886/
额外排查点
- 检查宿主机防火墙是否开放1886端口
- 执行
docker ps确认端口映射显示为0.0.0.0:1886->1886/tcp - 进入容器内部执行
curl http://0.0.0.0:1886/,确认服务在容器内正常可用
内容的提问来源于stack exchange,提问作者Vikas 1234
相关产品推荐
相关产品推荐

