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

如何从Docker容器内部访问宿主机本地运行的PostgreSQL数据库?

Linux环境Docker容器访问宿主机PostgreSQL失败排查方案

必查配置项

  • PostgreSQL监听地址配置
    编辑postgresql.conf文件(默认路径/var/lib/postgresql/<版本号>/main/postgresql.conf),将listen_addresses参数从默认的'localhost'修改为'*'或者包含Docker网桥网段的地址,修改后重启PostgreSQL服务生效。
  • PostgreSQL访问权限配置
    编辑pg_hba.conf文件(同目录下),新增规则允许Docker容器网段访问,Docker默认网桥网段为172.17.0.0/16,参考配置如下:
    host  all  all  172.17.0.0/16  scram-sha-256
    
    加密方式根据你的PostgreSQL配置选择scram-sha-256或者md5,修改后同样需要重启PostgreSQL服务。
  • 防火墙端口放行
    检查Linux系统防火墙(ufw/firewalld)是否放行5432端口的Docker网段访问,以ufw为例,执行命令:
    ufw allow in from 172.17.0.0/16 to any port 5432
  • host映射生效验证
    进入运行的容器内部,执行cat /etc/hosts确认host.docker.internal是否正确映射到宿主机的Docker网关地址(默认是172.17.0.1),也可以直接在连接字符串中将地址替换为172.17.0.1测试是否连通。
  • 容器内部连通性测试
    你之前的pg_isready测试如果是在宿主机执行的,不代表容器内部可以连通,需要进入容器内部执行对应命令验证:
    pg_isready -d DbName -h host.docker.internal -p 5432 -U DbUser
    若返回正常响应才说明网络链路是通的,否则优先排查前面的网络和PG配置项。

补充说明

如果使用Docker Compose部署,需要在对应服务的配置下添加extra_hosts参数,写法如下:

services:
  your-dotnet-api:
    image: your-api-image
    extra_hosts:
      - "host.docker.internal:host-gateway"
    # 其余配置省略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:15:06