Docker化PERN栈Nginx配置问题:无法访问pgAdmin容器
PERN栈Docker+Nginx部署:pgAdmin Bad Gateway问题修复
问题概述
使用Docker和Nginx部署PERN栈,期望通过单一URL访问前端容器与pgAdmin容器,前端可正常访问,但pgAdmin页面显示Bad Gateway。
错误原因及修正方案
1. Nginx中pgAdmin上游端口配置错误
pgAdmin容器内部运行在80端口,5050是容器映射到宿主机的端口。容器间通信需使用容器内部端口,而非宿主机映射端口。
2. 缺少pgAdmin上下文路径配置
pgAdmin默认以根路径(/)提供服务,当通过/pgadmin子路径访问时,需配置路径重写及上下文头信息,否则pgAdmin无法正确识别请求路径,导致资源加载失败或接口报错。
修正后的配置文件
修正后的nginx.conf
events { worker_connections 1024; } http { sendfile on; upstream app { server app:3000; } upstream pgadmin { server pgadmin:80; # 改为pgAdmin容器内部端口80 } server { listen 80; location / { proxy_pass http://app; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /pgadmin { proxy_pass http://pgadmin/; # 末尾添加斜杠,确保路径转发正确 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Script-Name /pgadmin; # 告知pgAdmin上下文路径 rewrite ^/pgadmin(.*)$ $1 break; # 重写请求路径,移除/pgadmin前缀 } } }
关键修改说明
- 端口修正:将
upstream pgadmin中的pgadmin:5050改为pgadmin:80,适配容器内部通信端口。 - 路径重写:通过
rewrite规则移除请求URL中的/pgadmin前缀,确保pgAdmin收到的请求路径符合其预期。 - 上下文头设置:添加
X-Script-Name头,告诉pgAdmin当前服务的上下文路径为/pgadmin,避免页面资源加载错误。
验证步骤
- 重启Nginx容器使配置生效:
docker-compose restart nginx - 访问pgAdmin页面:
http://localhost:3050/pgadmin - 若仍有问题,查看Nginx日志排查具体错误:
同时确认pgAdmin容器是否正常运行:docker-compose logs nginxdocker-compose ps pgadmin
内容的提问来源于stack exchange,提问作者Teehbow
相关产品推荐
相关产品推荐

