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

本地PC无法连接Synology DS920上Portainer部署的PostgreSQL

问题解决指南

一、正确的连接参数设置

你核心的错误是没搞清楚容器端口映射的逻辑:PostgreSQL容器的端口映射是2665:5432,这表示本地PC连接时要用宿主机(群晖)的2665端口,而非容器内部的5432端口。

  • Host:填你的Synology DS920局域网IP(比如192.168.x.x),不要用容器IP或localhost
  • Port:填映射的宿主机端口2665,不是容器的5432

修正后的Python代码:

import psycopg2

conn = psycopg2.connect(
    host="你的群晖局域网IP",
    port=2665,
    database="Test",
    user="你的数据库用户名",
    password="你的数据库密码"
)

二、连接失败的排查要点

  1. 端口映射校验:在Portainer的PostgreSQL容器详情里,确认端口映射是0.0.0.0:2665->5432/tcp(0.0.0.0表示允许所有IP访问)
  2. 群晖防火墙放行:进入群晖控制面板的「防火墙」,新增入站规则,允许2665端口的TCP请求
  3. pg_hba.conf访问控制:这是比listen_addresses更关键的配置,必须添加允许局域网IP访问的规则:
    通过Portainer打开PostgreSQL容器的终端,执行vi /var/lib/postgresql/data/pg_hba.conf,添加一行:
    host    all             all             192.168.0.0/16        scram-sha-256
    
    把192.168.0.0/16换成你的实际局域网网段,之后重启PostgreSQL容器生效

三、查看允许访问的用户列表

有两种实用方法:

  1. SQL查询:连接数据库后执行语句,查看所有用户及权限:
    SELECT usename, usesuper, usecreatedb FROM pg_user;
    
    若要查看特定数据库的用户权限:
    SELECT grantee, privilege_type 
    FROM information_schema.table_privileges 
    WHERE table_catalog = 'Test';
    
  2. 查看pg_hba.conf:该文件里的每一行都是一条访问控制规则,直接定义了哪些IP和用户能连接数据库

四、额外配置检查

除了listen_addresses = '*',还要注意:

  • 如果是自定义配置文件,要确保容器启动时挂载了包含修改后pg_hba.conf和postgresql.conf的卷,否则容器重启后配置会被重置
  • 确认数据库用户的连接权限,部分用户可能默认只允许本地连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:37