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

Docker Compose部署的PostgreSQL容器数据库远程连接配置求助

解决方案指引

一、修正Nginx配置(TCP反向代理)

PostgreSQL是基于TCP协议的服务,你之前用HTTP代理的方式完全错误,必须启用Nginx的stream模块实现TCP转发:

  1. 确认Nginx已包含stream模块(主流发行版预编译包默认自带)
  2. 编辑Nginx主配置(通常路径为/etc/nginx/nginx.conf),在http代码块的同级位置添加stream块:
stream {
    server {
        listen x.x.x.x:5432; # 填写服务器公网IP,或用0.0.0.0监听所有网卡
        proxy_pass 127.0.0.1:5432; # 转发到本地PostgreSQL监听端口
        proxy_timeout 300s;
        proxy_connect_timeout 10s;
    }
}
  1. 删除或注释你之前添加的HTTP类型server块
  2. 验证配置并重启Nginx:
nginx -t
systemctl restart nginx

二、调整PostgreSQL配置允许远程连接

仅靠Nginx转发还不够,PostgreSQL默认只监听本地地址且拒绝外部认证,需修改两个核心配置:

1. 修改监听地址

找到容器内/var/lib/postgresql/data/postgresql.conf(对应本地Docker卷news-db-data),修改:

listen_addresses = '*'

快捷方式:直接在docker-compose的db服务command数组中添加参数覆盖:
在原有command列表中插入一行:"-c", "listen_addresses=*",

2. 修改认证规则

编辑同目录下的pg_hba.conf,添加允许外部访问的规则(生产环境建议替换为你本地机器的IP段,而非全开放):

host    all             all             0.0.0.0/0             scram-sha-256

三、重启服务使配置生效

重启Docker中的PostgreSQL服务:

docker-compose restart db

四、Dbeaver连接配置

确认服务器防火墙开放5432端口后,JDBC URL使用你之前的即可:

jdbc:postgresql://185.235.130.227:5432/pguser

连接时需填写.env文件中对应的db_user(即pguser)和db_pass密码。

额外注意事项

  • 生产环境禁止使用0.0.0.0/0的认证规则,必须限制为指定IP/IP段
  • 确保服务器防火墙(iptables/ufw等)放行5432端口的入站流量
  • 你的Docker端口映射127.0.0.1:${db_port}:${db_port}无需修改,Nginx在本地转发即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:08:36