Docker环境下Nginx反向代理请求后端被拒绝问题排查
Docker Nginx代理后端连接拒绝问题解决方案
这个问题我之前也碰到过,核心是没搞清楚Docker容器间通信的端口逻辑,咱们一步步拆解:
问题根源
看你的错误日志:connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /backend HTTP/1.1", upstream: "http://172.20.0.2:3001/"
这里Nginx试图连接后端容器的3001端口,但后端容器根本没在这个端口上监听——在你的docker-compose.yml里,backend_service_1是把容器内部的5000端口映射到宿主机的3001,容器间通信是直接走容器内部端口,不是宿主机的映射端口。
修复步骤
1. 修正Nginx的upstream配置
把nginx.conf里的upstream部分改成下面这样,用后端容器的内部端口5000:
upstream backend { server backend_service_1:5000; }
2. 额外验证点(可选但推荐)
- 进入后端容器,确认服务确实在
5000端口监听:docker exec -it <backend_container_id> netstat -tulpn | grep 5000 - 检查容器是否都在同一个网络:
确保docker network inspect my-networkbackend_service_1和frontend(Nginx容器)都在这个网络的容器列表里。
改完配置后重启Nginx容器,再访问localhost:3000/backend应该就能正常代理到后端服务了。
内容的提问来源于stack exchange,提问作者Dinosaur-Guy
相关产品推荐
相关产品推荐

