同Docker网络下Nginx容器无法访问Express.js应用容器如何解决
问题根因与解决方案
核心原因
你的Express服务仅绑定了App容器内部的本地回环地址127.0.0.1,该地址仅允许容器内部的请求访问,同一Docker网络下的其他容器发起的外部请求无法被监听到,因此会返回连接拒绝错误。
验证方法
进入App容器的CLI,执行以下命令查看端口监听状态:
ss -tulpn | grep 3030
如果返回结果中的监听地址为127.0.0.1:3030,即可确认该问题。
修复步骤
- 修改Express应用的启动监听配置,将监听地址从
127.0.0.1替换为0.0.0.0,示例代码如下:
// 修改前 app.listen(3030, '127.0.0.1', () => { console.log('服务启动成功') }) // 修改后 app.listen(3030, '0.0.0.0', () => { console.log('服务启动成功') })
- 重新构建App容器镜像并重启服务,再次从Webserver容器发起curl请求即可正常得到响应。
其他排查方向
如果修改监听地址后问题仍然存在,可检查App容器内部是否开启了ufw、iptables等防火墙规则,确认3030端口未被拦截。你当前的docker-compose网络配置完全正常,无需调整网络相关参数。
内容的提问来源于stack exchange,提问作者Pavel K
相关产品推荐
相关产品推荐

