Nginx反向代理多域名多容器遇502错误排查求助
问题排查与解决方案
针对你访问sub1.domain.de出现502 Bad Gateway错误的问题,结合你的配置和描述,以下是核心排查点及解决方法:
1. 容器名称匹配问题
检查docker-compose.yml中,对应sub1反向代理的Spring Boot服务名称是否为container1:
- Nginx容器内部通过Docker服务名做DNS解析,如果你的服务实际名称不是
container1(比如叫app1或其他),Nginx无法找到目标容器,会直接返回502。 - 修正方法:将Nginx配置里
proxy_pass http://container1:8080;的container1替换为docker-compose.yml中对应的服务名称。
2. 容器内部端口不匹配
确认container1容器内的Spring Boot应用实际监听端口是8080:
- 如果你在
docker-compose.yml中给该服务的端口映射是8080:8081(即容器内部应用跑在8081端口),那Nginx的proxy_pass端口需要改为8081,否则会连接失败。 - 查看Spring Boot应用的启动日志,确认应用监听的端口号,确保和Nginx配置中的端口一致。
3. Docker网络连通性检查
确保Nginx容器和container1处于同一个Docker网络:
- Docker Compose默认会为所有服务创建专属网络,但如果你的
docker-compose.yml中手动为不同服务指定了不同网络,会导致容器间无法通信。 - 可以通过命令
docker inspect <nginx-container-name> | grep Networks和docker inspect <container1-name> | grep Networks验证两者是否在同一网络。
4. 目标容器状态验证
检查container1是否正常启动并运行:
- 执行
docker-compose logs container1查看应用启动日志,确认没有启动失败、端口占用等错误。如果应用未成功启动,Nginx自然无法连接到服务。
额外注意点
你配置中sub2.domain.de对应的proxy_pass写的是http://bcontainer2:8081,但你提到能通过IP:8081访问container2,这里可能是笔误,建议修正为http://container2:8081避免后续访问sub2时出现同样问题。
内容的提问来源于stack exchange,提问作者4ctive
相关产品推荐
相关产品推荐

