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

无法连接GCP虚拟机上的PostgreSQL服务器,求问题排查方案

GCP虚拟机PostgreSQL连接被拒绝排查

问题背景

已完成以下配置仍无法连接GCP虚拟机上的PostgreSQL:

  • 创建目标数据库
  • GCP防火墙开放5432端口入站流量
  • 修改postgresql.conf设置listen_addresses = '*'
  • 在pg_hba.conf中通过trust方式添加本地公网IP到允许列表,监听端口设为5432

执行连接命令后收到错误:

postgres@LAPTOP-14QDEC1P:/mnt/d/random path $ psql -U postgres -p 5432 -h xx.xxx.xxx.xxx api_fp
psql: error: could not connect to server: Connection refused
        Is the server running on host "xx.xxx.xxx.xxx" and accepting
        TCP/IP connections on port 5432? 

可能的问题及检查步骤

  • PostgreSQL服务未重启:修改postgresql.conf和pg_hba.conf后必须重启服务才能加载新配置,执行对应命令重启:
    # 基于systemd的系统(如Ubuntu 18.04+)
    sudo systemctl restart postgresql
    # 或用pg_ctl命令(需切换到postgres用户)
    sudo -u postgres pg_ctl restart -D /var/lib/postgresql/版本号/main
    
  • 虚拟机本地防火墙拦截:GCP云防火墙之外,虚拟机操作系统可能有iptables/ufw规则限制5432端口,检查并调整:
    # 查看iptables规则
    sudo iptables -L INPUT -n | grep 5432
    # 查看ufw状态(Ubuntu)
    sudo ufw status
    
    若存在拦截,添加允许规则:sudo ufw allow 5432/tcp或sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
  • pg_hba.conf规则格式或位置错误:确认规则格式正确且优先级高于拒绝规则,例如单个IP的规则应为:
    host    all             postgres        你的公网IP/32        trust
    
    注意规则要放在host all all 0.0.0.0/0 reject这类拒绝规则之前
  • PostgreSQL实际监听状态不符:检查服务实际监听的地址和端口,确认是0.0.0.0:5432(对应listen_addresses='*'):
    netstat -tulpn | grep postgres
    # 或用ss命令
    ss -tulpn | grep postgres
    
    若显示127.0.0.1:5432,说明listen_addresses配置未生效,需检查配置文件路径是否正确(可能存在多个配置文件)
  • GCP防火墙规则配置有误:再次确认防火墙规则:
    • 方向为入站
    • 目标是你的虚拟机实例(或对应的标签/实例组)
    • 来源IP是你的本地公网IP(测试时可临时设为0.0.0.0/0验证)
    • 协议为TCP,端口5432
    • 规则状态为已启用
  • 虚拟机公网IP状态异常:确认GCP虚拟机的公网IP是静态IP,且连接时使用的IP与实例当前公网IP一致(动态IP可能重启后变化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:16