Docker部署Chainlink节点连接PostgreSQL报no pg_hba.conf错误如何解决?
Chainlink节点PostgreSQL连接拒绝问题修复方案
错误本质
本次报错是PostgreSQL的访问控制配置文件pg_hba.conf未放行Chainlink节点IP(192.168.1.198)的非SSL访问请求,属于PostgreSQL默认安全限制的正常拦截。
修复步骤
- 修改PostgreSQL访问控制配置
进入PostgreSQL容器,找到pg_hba.conf文件(默认路径为/var/lib/postgresql/data/pg_hba.conf),在文件末尾添加放行规则:
测试环境可临时放行所有IP访问,方便调试:
生产环境请严格限定为Chainlink节点的固定IP:host all all 0.0.0.0/0 scram-sha-256
同时修改同目录下的host postgres postgres 192.168.1.198/32 scram-sha-256postgresql.conf,将listen_addresses配置改为'*',允许PostgreSQL监听所有网卡的请求。 - 重启PostgreSQL容器使配置生效
执行命令:docker restart <你的PostgreSQL容器名/容器ID> - 可选:更稳定的Docker容器网络配置(推荐)
使用宿主机局域网IP连接两个容器容易因IP变动导致连接失效,建议创建自定义Docker网桥实现容器间稳定互通:- 创建自定义网桥
docker network create chainlink-net- 启动PostgreSQL容器时加入网桥(如果容器已运行,可执行
docker network connect chainlink-net <PostgreSQL容器名>添加) - 调整Chainlink启动命令,加入同一个网桥,同时删除原命令中多余的无效
-v参数(你原命令中的-v未指定挂载路径,会导致启动报错),示例命令:
docker run --network chainlink-net -p 6688:6688 -v $(pwd)/chainlink-data:/chainlink -it --env-file=.env smartcontract/chainlink:0.10.11 local n- 修改
.env文件中的DATABASE_URL,将主机地址替换为PostgreSQL的容器名,无需再写固定IP:
DATABASE_URL=postgresql://postgres:somePassword@<PostgreSQL容器名>:5432/postgres?sslmode=disable
注:如果PostgreSQL使用md5加密方式存储密码,将上述规则中的scram-sha-256替换为md5即可。
内容的提问来源于stack exchange,提问作者luther wardle
相关产品推荐
相关产品推荐

