Goeserver 添加商店:无法获取连接:无法创建 PoolableConnectionFactory(与 localhost:5432 的连接被拒绝

问题描述 投票:0回答:1

我有一个启用了 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

  1. 尝试连接到postgis实例

psql -h localhost -p 5432 -U postgres -d db
- 有效

2.

postgis geoserver
1个回答
0
投票

也许这会对你们中的一些人有所帮助:

您的 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!)。

更好的解决方案:

  1. 检查 postgres 容器以找出它所在的 docker 网络的名称(在我的 docker 中:它驻留在网络“docker_default”中

  2. 首次运行geoserver容器时指定网络名称:--network=

我尝试过,一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.