【问题标题】:Cannot connect to dockerized Postgres through dockerized pgAdmin无法通过 dockerized pgAdmin 连接到 dockerized Postgres
【发布时间】:2021-11-05 11:44:31
【问题描述】:

我有一个 docker-compose 文件:

version: '3'

services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
        POSTGRES_DB: ayyy
        POSTGRES_USER: letsgo
        POSTGRES_PASSWORD: pwpwpwpw22
  pgadmin:
    image: dpage/pgadmin4
    environment:
        PGADMIN_DEFAULT_EMAIL: user@example.com
        PGADMIN_DEFAULT_PASSWORD: pwpwpwpw1
    ports:
      - "5433:80"

(我将环境变量更改为不欺骗我的凭据)

但是我无法通过 pgAdmin 连接到我的 Postgres 服务器。 pgAdmin 正在使用从端口 5433 到我的子域 pgadmin.domain.com 的反向代理。我还将 pgAdmin 容器中的 HTTP 反向代理到 HTTPS 中。 (不知道会不会有问题)

这是我得到的错误:

无法连接到服务器: 连接到“db”(192.168.32.3)的服务器,端口 5432 失败:超时已过期

如果我使用localhost 作为主机名,我会得到:

无法连接到服务器: 在“localhost”(127.0.0.1)连接到服务器,端口 5432 失败: 连接被拒绝服务器是否在该主机上运行并接受 TCP/IP 连接?在“localhost”(::1) 连接到服务器,端口 5432 failed: Address not available 服务器是否在该主机上运行 并接受 TCP/IP 连接?

更新:我什至无法在彼此之间 ping 容器。服务名称已正确解析为 IP,但我没有收到任何响应。

【问题讨论】:

  • 这里只使用服务名db作为数据库的主机名。 Docker 有自己的内部 DN,它将解析服务名称以更正 docker IP。此外,如果您不需要将数据库暴露给外界,只要您的服务共享同一个网络,您就可以删除 5432 端口。
  • 当我使用“db”作为主机名时,出现“超时已过期”错误。我不确定是否需要将 docker 的 ip 添加到 postgres 的 pg_hba.conf 文件中以消除错误,或者是否增加超时时间就足够了 - 我将其增加到 1 分钟并且问题仍然存在。
  • 通常情况下,您不需要在 postgres 配置中添加任何 IP。您能否展示您如何在 pdadmin 中配置与数据库的连接。这可能是您的问题所在。您还需要分贝来收听 * 以便能够在其容器之外提供服务。
  • pgAdmin v6.1,创建服务器选项卡:连接主机:db,端口:5432,维护数据库:postgres,用户名:letsgo,密码:pwpwpwpw22。我还注意到,虽然两个容器都在同一个网络中,但我无法相互 ping 通——我对 docker 并没有真正的经验,所以我不确定这是否是预期的行为。

标签: postgresql docker


【解决方案1】:

我什至无法打开服务器上的端口,所以我重新安装了它。从那时起,一切正常。

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 2015-07-25
    • 2019-11-05
    • 2019-03-24
    • 2018-06-10
    • 1970-01-01
    • 2019-11-06
    • 2017-12-29
    • 2014-10-08
    相关资源
    最近更新 更多