You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker同步容器无法连接Postgres数据库容器问题求助

排查Docker同步容器无法连接Postgres容器的问题

以下是针对你的问题的具体排查步骤:

  • 确认两个容器处于同一Docker网络
    Docker默认bridge网络存在DNS解析限制,建议创建自定义网络并将Postgres和同步服务容器都加入其中。加入后,同步服务可直接用Postgres容器名称作为连接主机名(如postgres:5432),无需手动指定IP。若使用默认bridge网络,先确认同步容器能ping通Postgres容器的IP(172.19.0.2),排除基础网络连通性问题。

  • 检查Postgres的监听地址配置
    进入Postgres容器,查看postgresql.conf中的*listen_addresses*参数:

    docker exec -it <postgres-container-id> cat /var/lib/postgresql/data/postgresql.conf | grep listen_addresses
    

    如果值为localhost,Postgres仅监听容器内部的127.0.0.1,其他容器无法连接。需将其修改为*,再重启Postgres容器:

    docker exec -it <postgres-container-id> sed -i "s/listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/postgresql/data/postgresql.conf
    docker restart <postgres-container-id>
    
  • 验证Postgres的访问控制规则(pg_hba.conf)
    检查pg_hba.conf是否允许Docker子网的连接:

    docker exec -it <postgres-container-id> cat /var/lib/postgresql/data/pg_hba.conf
    

    添加一行允许172.19.0.0/16子网的规则(对应你的Docker子网):

    docker exec -it <postgres-container-id> echo "host all all 172.19.0.0/16 md5" >> /var/lib/postgresql/data/pg_hba.conf
    docker restart <postgres-container-id>
    
  • 修正同步服务的连接字符串
    容器间连接无需使用宿主机的映射端口,直接用Postgres容器内部的5432端口。确保Go服务的连接字符串格式正确,例如:

    connStr := "host=172.19.0.2 port=5432 user=your_user dbname=your_db password=your_pass sslmode=disable"
    

    注意不要用0.0.0.0作为主机名(这是监听地址,不是连接目标);若在同一自定义网络,用容器名替代IP更可靠,比如host=postgres。

  • 确认Postgres容器内部端口监听状态
    进入Postgres容器,检查5432端口是否正常监听:

    docker exec -it <postgres-container-id> netstat -tulpn | grep 5432
    

    输出应显示0.0.0.0:5432或:::5432,表示允许外部连接;若仅显示127.0.0.1:5432,说明监听地址配置有误,回到第二步修正。

内容的提问来源于stack exchange,提问作者Flo Sojer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:21:15