本地无法连接通过Docker镜像创建的PostGIS数据库问题求助
PostGIS Docker 容器本地连接问题排查步骤
- 第一步:排查本地端口占用
Windows系统下执行命令netstat -ano | findstr :5432检查5432端口是否被其他进程占用。如果存在占用,要么终止占用进程,要么启动容器时更换映射端口,例如将启动参数改为-p 5433:5432,后续连接时使用新配置的端口。 - 第二步:校验连接参数
你使用的启动命令没有指定用户名和默认数据库,默认用户名为postgres,默认数据库名为postgres,密码为你设置的test。连接时地址请填写127.0.0.1而非localhost,部分客户端解析localhost时会优先走本地套接字而非TCP连接,无法命中Docker端口映射规则。 - 第三步:检查容器内PostgreSQL配置
- 执行命令进入容器:
docker exec -it some-postgis bash - 切换到postgres用户:
su postgres - 查看访问控制配置文件
/var/lib/postgresql/data/pg_hba.conf,确认存在规则host all all 0.0.0.0/0 scram-sha-256允许所有IP访问,缺少该规则需要添加后重启容器。 - 查看服务配置文件
/var/lib/postgresql/data/postgresql.conf,确认listen_addresses = '*',该配置允许PostgreSQL监听所有网卡地址,默认镜像已经配置完成,如有修改需要复原后重启容器。
- 执行命令进入容器:
- 第四步:排查防火墙拦截
临时关闭本地防火墙测试连接是否正常,如果可以正常连接,添加防火墙入站规则放行5432端口的TCP连接即可。 - 第五步:命令行测试定位问题
安装PostgreSQL命令行客户端后执行命令psql -h 127.0.0.1 -p 5432 -U postgres -d postgres,输入密码test测试连接,命令行返回的详细报错信息可以进一步定位问题原因。
内容的提问来源于stack exchange,提问作者user1298426
相关产品推荐
相关产品推荐

