本地Docker环境Nginx反向代理报Connection refused错误求助
解决Nginx反向代理Docker容器时出现Connection refused(111)的问题
以下是针对性的排查与解决步骤:
1. 确认容器处于同一Docker网络
Docker容器默认使用bridge网络,但手动创建的容器可能分属不同网络,导致无法互通:
- 执行
docker network ls查看当前所有Docker网络 - 执行
docker inspect <容器名称/ID>查看目标容器所属网络 - 若不在同一网络,可将容器加入同一网络:
或创建自定义网络并启动容器:docker network connect <目标网络名> <容器名称>docker network create my-proxy-network docker run --network my-proxy-network --name upstream-container ... docker run --network my-proxy-network --name nginx-proxy ...
2. 核对上游容器的端口配置
- 确认Nginx配置中
proxy_pass指向的是容器内部端口,而非主机映射端口。比如上游容器将内部80端口映射到主机8080,Nginx配置应写http://upstream-container:80而非http://localhost:8080 - 进入上游容器,执行
ss -tulpn(或netstat -tulpn),确认服务监听的是0.0.0.0(允许容器外部访问)而非127.0.0.1(仅容器本地访问)
3. 验证Nginx配置的上游地址正确性
- 确保
proxy_pass使用容器名称或容器IP,而非localhost(容器内的localhost指向自身,而非主机)。示例配置:location / { proxy_pass http://upstream-container:80; } - 进入Nginx容器执行
ping <上游容器名称>,测试是否能解析到上游容器IP,确认网络连通性
4. 检查上游服务状态
- 执行
docker logs <上游容器名称>查看服务日志,确认服务是否正常启动、无报错 - 通过主机映射端口访问上游服务,验证服务本身可正常响应请求
5. 排查防火墙/安全组规则
- 确认主机防火墙未拦截Docker容器间的网络流量
- Linux环境可执行
iptables -L查看规则,确保Docker相关网络的流量被允许
内容的提问来源于stack exchange,提问作者Estani Pettigrew
相关产品推荐
相关产品推荐

