我有一个启用了 Postgis 扩展的 Postgres 服务器,在 docker 上运行,端口 5432 暴露。 我能够使用以下方式连接
psql -h localhost -p 5432 -U postgres -d db
但是当我尝试使用相同的凭据通过 geoserver 添加商店时,出现以下错误:
Error creating data store, check the parameters. Error message: Unable to obtain connection: Cannot create PoolableConnectionFactory (Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.)
这是我在 /var/lib/postgresql/data 上找到的 pg_hba.conf 文件
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host all all all scram-sha-256
我使用geoserver 2.25
psql -h localhost -p 5432 -U postgres -d db
- 有效
2.
也许这会对你们中的一些人有所帮助:
您的 Geoserver 实例也是一个 docker 容器吗?
如果是,默认情况下,您的容器(postgres 和 geoserver)很可能不仅位于不同的主机上,而且也位于不同的网络上。
例如,在我的配置中,postgres 容器 IP 是 172.21.0.2/16,geoserver 容器 IP 是 172.17.0.2/16 => 两者位于不同的网络上。
这意味着,如果您在尝试连接到 postgres 时使用“localhost”或“127.0.0.1”,它将引用 geoserver 主机(该主机上没有 postgres 服务器!),而不是 postgres 主机,并且很可能是两个主机甚至彼此都不认识(一个的 ping 永远不会到达另一个)!
但是两台主机都知道您的主主机(真实主机)=> 在这种特殊情况下唯一的解决方案是使用真实主机 IP 地址(而不是 localhost!)。
更好的解决方案:
检查 postgres 容器以找出它所在的 docker 网络的名称(在我的 docker 中:它驻留在网络“docker_default”中
首次运行geoserver容器时指定网络名称:--network=
我尝试过,一切正常。