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

Docker容器访问本地PostgreSQL数据库的连接问题排查

解决Docker容器连接Ubuntu宿主PostgreSQL的问题

问题根源

容器内的127.0.0.1指向容器自身的回环地址,而非Ubuntu宿主;而host.docker.internal在Ubuntu版Docker中默认未启用,导致域名解析失败。

可行解决方案

方案一:使用宿主实际IP连接

  1. 查看Ubuntu宿主的局域网IP:
    ip addr show
    
    找到对应网卡(如eth0或wlan0)的inet字段,比如192.168.1.100。
  2. 修改Python代码中的数据库连接配置,将host设为上述IP。
  3. 配置PostgreSQL允许Docker网段访问:
    • 编辑pg_hba.conf(路径通常为/etc/postgresql/<版本>/main/pg_hba.conf),添加一行:
      host all all 172.17.0.0/16 md5
      
      (Docker默认桥接网段为172.17.0.0/16,若自定义过网段需对应修改)
    • 重启PostgreSQL服务:
      sudo systemctl restart postgresql
      
  4. 确保宿主防火墙开放5432端口:
    sudo ufw allow 5432/tcp
    

方案二:使用Docker host网络模式

运行容器时直接共享宿主网络空间,此时容器内的127.0.0.1等价于宿主的回环地址:

docker run --rm --network host webhook_receiver &

注意:该模式下无需使用-p 5000:5000端口映射,容器应用直接使用宿主的5000端口。

方案三:启用host.docker.internal解析

  1. 编辑Docker配置文件/etc/docker/daemon.json,添加以下内容:
    {
      "extra_hosts": ["host.docker.internal:host-gateway"]
    }
    
  2. 重启Docker服务:
    sudo systemctl restart docker
    
  3. 重新运行容器,此时代码中使用host.docker.internal即可连接到宿主的PostgreSQL。

额外检查项

  • 确认Ubuntu宿主上的PostgreSQL服务正常运行:
    sudo systemctl status postgresql
    
  • 验证宿主的5432端口可被访问:
    telnet <宿主IP> 5432
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:42:49