【问题标题】:Connecting to postgres from a docker container从 docker 容器连接到 postgres
【发布时间】:2016-07-20 01:54:25
【问题描述】:

对于为什么我的 java 应用程序无法连接到我的 postgres 数据库,我有点迷茫。我的目标是通过 jdbc 连接到 postgres 数据库。该应用程序将在 docker 容器内运行。

this.connection = `DriverManager.getConnection("jdbc:postgresql://<myip>:5432/databasename", "usr", "password");`

我遇到了异常:

Connection refused.  Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

当我从桌面运行应用程序时,它会按预期连接。当我从 docker 容器中运行它时,它失败了。

我今天下午刚刚安装了 docker,并运行了 windows 的入门,所以我的设置状态是在运行之后。这是我的 Dockerfile 的内容:

FROM java:8
ADD VaultServer /
EXPOSE 3971
EXPOSE 3972
ENTRYPOINT ["java", "-jar", "VaultServer.jar"]

【问题讨论】:

  • 您是否正确配置了pg_hba.conf 文件以接受来自 docker 容器 IP 地址的连接?
  • 我想是的。这是我本地机器上的一个安装,我没有修改它,因为它最初是由默认进程创建的。它只有以下内容: # IPv4 本地连接:host all all 127.0.0.1/32 md5 # IPv6 local connections:host all all ::1/128 md5
  • 您似乎想从 Docker 容器内的应用程序连接到主机上的 PostgreSQL 安装。如果是这种情况,请在此处阅读stackoverflow.com/questions/31249112/…

标签: java postgresql docker


【解决方案1】:

在数据文件夹中有一个名为pg_hba.conf 的文件,您必须对其进行配置以接受连接。所以你的pg_hba.conf 文件应该有这样一行 host all all YourDockerip/24 md5.

之后配置postgresql.conf 文件。您必须将 listen_addresses 更新为 all 并确保通过删除 # 标记取消注释该行。所以你的listen_addresses 应该看起来像这样listen_addresses = '*'

【讨论】:

  • 抱歉,我还在纠结 docker。你的意思是docker机器的ip还是容器的ip?如果是后者;有什么方法可以从 docker 收听任何/所有内容,因为我打算最终动态地上下旋转这些容器。
  • 要收听所有IP地址,您可以使用0.0.0.0/0。配置文件后是否重启了 postgreSQL 服务器?
猜你喜欢
  • 2019-03-16
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2020-04-27
  • 2020-06-06
  • 2018-11-28
相关资源
最近更新 更多