Docker部署Nginx反向代理始终返回连接被拒绝问题排查
Docker Nginx反向代理容器无法访问页面(连接被拒绝/日志为空)
核心排查与解决步骤
1. 确认端口映射是否正确
Docker容器默认不会暴露端口到宿主机,必须显式映射。本地Nginx直接占用宿主机80端口,但容器中的Nginx如果不做端口映射,宿主机无法访问。
- 停止现有容器,重新启动时添加端口映射:
# 若本地Nginx已停止,直接映射80端口 docker run -d -p 80:80 --name nginx-proxy <你的镜像名> # 若本地Nginx仍在运行,映射到其他端口(如8080) docker run -d -p 8080:80 --name nginx-proxy <你的镜像名> - 之后访问
http://localhost(或http://localhost:8080)、http://camera2.localhost(或http://camera2.localhost:8080)测试。
2. 检查容器与后端服务器的网络连通性
容器默认使用bridge网络,可能无法访问宿主机局域网内的后端IP(10.10.1.53/54):
- 进入容器测试连通性:
docker exec -it nginx-proxy bash # ping后端IP ping 10.10.1.54 # 用curl测试后端服务是否可达 curl http://10.10.1.54 - 若无法连通,切换为host网络模式启动容器(直接复用宿主机网络,与本地Nginx环境一致):
docker run -d --net=host --name nginx-proxy <你的镜像名>
3. 验证Nginx配置语法正确性
虽然本地配置可用,但容器内Nginx版本或文件编码可能导致语法错误:
- 进入容器执行配置检查:
docker exec -it nginx-proxy nginx -t - 若提示引号相关错误,检查
default.conf中的",替换为实际双引号",重新复制配置并重启容器:docker cp default.conf nginx-proxy:/etc/nginx/conf.d/default.conf docker restart nginx-proxy
4. 查看容器启动日志
容器日志为空可能是Nginx未正常启动,查看启动日志定位问题:
docker logs nginx-proxy
日志会显示配置错误、端口占用等启动失败原因。
5. 测试Host头匹配是否生效
用curl模拟请求,验证Nginx是否根据Host头路由到对应后端:
# 测试localhost路由 curl -v http://localhost:8080 # 测试camera2.localhost路由 curl -v -H "Host: camera2.localhost" http://localhost:8080
内容的提问来源于stack exchange,提问作者bakeljouw
相关产品推荐
相关产品推荐

