Docker自托管Retool连接本地PostgreSQL失败的解决方法
解决Docker部署Retool连接本地PostgreSQL的ECONNREFUSED错误
一、修正连接字符串
容器内的localhost指向容器自身,而非你的宿主机,原连接字符串无法访问宿主机上的PostgreSQL,需修改地址:
- 对于Linux/macOS/Windows,可直接使用Docker官方提供的宿主机DNS名称
host.docker.internal,修改后的连接字符串:postgresql://USERNAME:PASSWORD@host.docker.internal:5432/application?schema=public - 也可替换成宿主机的内网IP(比如
192.168.1.100),示例:postgresql://USERNAME:PASSWORD@192.168.1.100:5432/application?schema=public
二、配置PostgreSQL白名单(允许Retool访问)
- 找到PostgreSQL的配置文件目录:
- Linux:通常在
/var/lib/postgresql/<版本号>/main - macOS:
/Library/PostgreSQL/<版本号>/data - Windows:安装目录下的
data文件夹
- Linux:通常在
- 修改
pg_hba.conf文件,添加访问规则:- 若使用
host.docker.internal,添加:host application USERNAME host.docker.internal/32 scram-sha-256 - 若使用Docker默认桥接网段(通常为
172.17.0.0/16),添加:host application USERNAME 172.17.0.0/16 scram-sha-256 - (注:
scram-sha-256为PostgreSQL认证方式,若你的数据库用的是md5,替换即可)
- 若使用
- 修改
postgresql.conf文件,将listen_addresses参数改为:
这一步让PostgreSQL监听所有网卡的请求,默认仅监听localhost。listen_addresses = '*' - 重启PostgreSQL服务:
- Linux:
sudo systemctl restart postgresql - macOS(Homebrew安装):
brew services restart postgresql - Windows:在系统服务列表中重启PostgreSQL服务
- Linux:
内容的提问来源于stack exchange,提问作者seddouguim
相关产品推荐
相关产品推荐

