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

无法连接GCP Ubuntu虚拟机Docker容器中的PostgreSQL数据库

GCP Ubuntu 18.04虚拟机Docker PostgreSQL公网IP连接超时排查方案

问题场景

我在GCP创建的Ubuntu 18.04虚拟机中,以Docker容器运行PostgreSQL数据库。已将容器5432端口映射到虚拟机5432端口,配置了防火墙规则(先后尝试本地IP和0.0.0.0作为源范围),容器可正常运行。使用虚拟机localhost或私有IP能正常连接,但使用公网IP时连接超时。通过sudo lsof -i -P -n | grep LISTEN和sudo netstat -tulpn | grep LISTEN检查发现5432端口处于监听状态,但执行telnet <公网IP>:5432时无响应,无法排查原因。创建容器的命令为:

docker container create \
    --name container_name \
    -p 5432:5432 \
    -h container_name \
    -e POSTGRES_PASSWORD=password \
    postgres

排查与解决步骤

  • 修正PostgreSQL绑定配置
    PostgreSQL默认仅监听容器内部的localhost,即使做了端口映射,外部也无法访问。需修改容器内的PostgreSQL配置:

    1. 进入容器:docker exec -it container_name bash
    2. 定位配置文件路径(可通过psql -U postgres -c 'SHOW config_file;'查看准确路径,以PostgreSQL 14为例,路径为/var/lib/postgresql/14/main/)
    3. 修改postgresql.conf,设置监听所有IP:
      sed -i "s/^#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/postgresql/<版本号>/main/postgresql.conf
      
    4. 修改pg_hba.conf,添加允许所有IP连接的规则:
      echo "host    all             all             0.0.0.0/0               scram-sha-256" >> /var/lib/postgresql/<版本号>/main/pg_hba.conf
      
    5. 重启容器:docker restart container_name
  • 确认GCP防火墙规则有效性
    确保GCP层面的防火墙规则正确配置:

    1. 登录GCP控制台,进入「VPC网络」→「防火墙」
    2. 检查是否存在允许入站TCP 5432端口的规则,源范围设为0.0.0.0/0(或你需要的IP段)
    3. 确认规则的「目标标签」或「目标网络」包含你的虚拟机,且规则处于「已启用」状态,未被高优先级的拒绝规则覆盖
  • 检查虚拟机本地防火墙(ufw)
    Ubuntu默认可能启用ufw,会拦截外部请求:

    1. 查看ufw状态:sudo ufw status
    2. 若启用,添加允许5432端口的规则:sudo ufw allow 5432/tcp
    3. 重载ufw使规则生效:sudo ufw reload
  • 验证Docker端口映射监听地址
    确认Docker端口映射绑定到所有IP而非仅localhost:
    执行docker port container_name 5432,正常输出应为0.0.0.0:5432或:::5432。若输出为127.0.0.1:5432,需重新创建容器时显式指定绑定所有IP:

    docker container create \
        --name container_name \
        -p 0.0.0.0:5432:5432 \
        -h container_name \
        -e POSTGRES_PASSWORD=password \
        postgres
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:20:39