Docker部署PostgreSQL无法公网访问问题排查求助
解决Docker部署PostgreSQL公网访问问题
1. 检查Docker端口映射
得确认docker-compose.yaml里的端口映射绑定到0.0.0.0,别只绑localhost。正确写法是:
ports: - "0.0.0.0:5432:5432"
要是只写5432:5432,有些环境默认还是绑127.0.0.1,外部根本连不上。
2. 确认postgresql.conf监听设置
postgresql.conf里的listen_addresses必须设成'*',允许所有IP访问:
listen_addresses = '*'
另外要注意,如果你是把本地配置文件挂载到容器里的,得确认挂载路径没错,容器里的配置文件确实是修改后的版本,别白改了本地的,容器用的还是原来的。
3. 调整pg_hba.conf的访问规则
在pg_hba.conf里加一条允许外部访问的规则,比如:
# 生产环境建议限制IP段和用户,别直接开全权限 host all all 0.0.0.0/0 scram-sha-256
记住规则是从上到下匹配的,这条规则得放在拒绝类规则前面,不然会被先匹配到拒绝。
4. 正确重启容器
改完配置别只docker compose restart,有时候会有缓存,配置不生效,最好先停再启:
docker compose down && docker compose up -d
5. 排查网络障碍
- 检查宿主机的防火墙/安全组,得把5432端口对外开放,允许外部IP访问。
- 用
telnet 宿主机IP 5432或者nc -zv 宿主机IP 5432测一下端口能不能通,先排除网络堵了的问题。 - 要是用的云服务器,别忘了检查云服务商的安全组,得开5432端口的入站权限,这步很容易忘。
6. 验证用户访问权限
用来连接的PostgreSQL用户得有外部访问的权限,比如创建用户的时候可以这么设:
CREATE USER your_user WITH PASSWORD 'your_password' LOGIN; GRANT ALL PRIVILEGES ON DATABASE your_db TO your_user; -- 允许这个用户从任意IP连接 ALTER USER your_user WITH HOST ALL;
内容的提问来源于stack exchange,提问作者Nyanners
相关产品推荐
相关产品推荐

