Docker Compose中PostgreSQL副本拒绝连接问题求助
PostgreSQL副本库连接拒绝问题排查方案
检查Docker Compose服务配置细节
- 确认副本库服务的端口映射
5433:5432是否正确,同时注意同一Docker网络内的服务通信需使用容器内部端口5432,而非主机映射的5433。比如副本库对应的PgBouncer配置中,数据库连接地址应写host=<副本库服务名> port=5432,而非主机IP+5433。 - 验证所有服务(主库、副本库、PgBouncer、后端应用)是否配置在同一自定义网络下,避免默认bridge网络的隔离限制。
- 确认副本库服务的端口映射
测试容器间网络可达性
- 进入任意同网络的容器(如主库容器),执行命令
psql -h <副本库服务名> -p 5432 -U <数据库用户名>,直接测试副本库的容器内端口连通性。若连接失败,优先排查服务名拼写错误、网络配置遗漏。
- 进入任意同网络的容器(如主库容器),执行命令
核对副本库的实际生效配置
- 进入副本库容器,执行
cat /var/lib/postgresql/data/postgresql.conf | grep listen_addresses,确认listen_addresses值为'*',而非仅本地回环地址。 - 查看
cat /var/lib/postgresql/data/pg_hba.conf,确认存在允许Docker网络段的连接规则,例如host all all 172.16.0.0/12 md5(根据你的自定义网络子网调整)。若初始化脚本未正确覆盖配置文件,可能导致实际生效的配置与预期不符。
- 进入副本库容器,执行
检查主机端口占用情况
- 在宿主机执行
netstat -tulpn | grep 5433(Linux)或netstat -ano | findstr :5433(Windows),确认5433端口未被其他进程占用。若占用,修改Compose中的端口映射为其他未被使用的端口(如5434:5432)后重试。
- 在宿主机执行
验证副本库容器监听状态
- 进入副本库容器,执行
ss -tulpn | grep postgres,确认PostgreSQL进程确实在0.0.0.0:5432监听,而非仅绑定127.0.0.1。
- 进入副本库容器,执行
内容的提问来源于stack exchange,提问作者canersevdiceginibekleyenoglu
相关产品推荐
相关产品推荐

