Ubuntu系统下Docker部署PostgreSQL与pgAdmin后访问连接重置问题求助
PostgreSQL与pgAdmin容器连接重置问题排查与解决
问题背景
在Ubuntu系统中已完成PostgreSQL和pgAdmin镜像下载并启动容器,启动命令如下:
PostgreSQL启动命令
sudo docker run --name some-postgres -e POSTGRES_PASSWORD=XYZ_PW -p 5432:5432 -d postgres
pgAdmin启动命令
sudo docker run --name pgadmin --link some-postgres:postgres -p 80:80 -d fenglc/pgadmin4
已确认两个容器均正常运行,但访问localhost或localhost:80时出现连接重置错误。以下是docker inspect pgadmin输出的NetworkSettings信息:
"NetworkSettings": { "Bridge": "", "SandboxID": "fb4f3dcf1eed267055060b945ba8fb4bff372873d1cc179a24c934c883c1d100", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "5050/tcp": null, "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" }, { "HostIp": "::", "HostPort": "80" } ] }, "SandboxKey": "/var/run/docker/netns/fb4f3dcf1eed", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "879f386a86712d2699373ef8667b07984db337e7267a2381da69cdbc5405251e", "Gateway": "XXXX.XX.0.1", "GlobalIPv6Address": "" }
排查与解决步骤
1. 检查pgAdmin容器内部服务状态
进入pgAdmin容器,检查80端口是否被正常监听:
sudo docker exec -it pgadmin /bin/bash netstat -tulpn | grep 80
如果未看到pgAdmin相关进程监听端口,重启容器尝试修复:
sudo docker restart pgadmin
2. 检查主机端口占用
确认Ubuntu主机80端口是否被其他进程占用:
sudo lsof -i :80
若有占用,更换pgAdmin映射端口(例如改为8080):
sudo docker stop pgadmin && sudo docker rm pgadmin sudo docker run --name pgadmin --link some-postgres:postgres -p 8080:80 -d fenglc/pgadmin4
之后访问localhost:8080测试。
3. 检查防火墙规则
查看ufw防火墙是否允许80端口入站流量:
sudo ufw status
若未开放,添加端口允许规则:
sudo ufw allow 80/tcp
如果是远程服务器,同步检查云服务商安全组是否开放80端口。
4. 改用Docker自定义网络替代--link
--link为Docker旧特性,改用自定义网络提升连接稳定性:
# 创建自定义网络 sudo docker network create pg-network # 重启PostgreSQL容器加入网络 sudo docker stop some-postgres && sudo docker rm some-postgres sudo docker run --name some-postgres --network pg-network -e POSTGRES_PASSWORD=XYZ_PW -p 5432:5432 -d postgres # 重启pgAdmin容器加入网络 sudo docker stop pgadmin && sudo docker rm pgadmin sudo docker run --name pgadmin --network pg-network -p 80:80 -d fenglc/pgadmin4
此时pgAdmin可通过容器名some-postgres直接访问PostgreSQL服务。
5. 查看容器日志定位错误
通过日志获取pgAdmin启动失败的具体原因:
sudo docker logs pgadmin
根据日志中的错误提示(如依赖缺失、配置错误)针对性修复。
内容的提问来源于stack exchange,提问作者Ashish Parab
相关产品推荐
相关产品推荐

