【问题标题】:Confluence in Docker can't see PostgreSQL in DockerDocker 中的 Confluence 在 Docker 中看不到 PostgreSQL
【发布时间】:2018-03-01 07:00:50
【问题描述】:

我正在尝试在 Docker 中同时设置 Confluence 和 PostgreSQL。我已经在我完全最新的 CentOS 6 机器上启动并运行它们,并通过卷映射到主机文件系统,因此我可以轻松地备份它们。我可以从另一台机器上使用 pgAdmin 连接到 PostgreSQL,我可以从同一台机器上的浏览器进入 Confluence。因此,基本上,这两个应用程序似乎都在各自的容器内按预期运行,并且外部世界可以访问,这当然消除了我的问题的一大堆可能性。

这个问题是 Confluence 在初始设置期间无法与 PostgreSQL 通信,这是它运行所必需的。我收到连接失败错误(具体来说:“无法访问数据库服务器或端口:SQLState - 08001 org.postgresql.util.PSQLException:连接尝试失败”)。

PostgreSQL 使用默认的 5432 端口,这当然是暴露的,否则我将无法通过 pgAdmin 连接到它,当然我知道我正在尝试的 ID/密码是正确的,原因相同(此外,如果这是一个身份验证问题,我不希望看到此错误消息)。当我在 Confluence 的初始设置期间尝试配置数据库连接时,我指定了主机的 IP 地址,就像从另一台机器上的 pgAdmin 一样,但这不起作用。我还尝试了一些我基本上知道行不通的东西(0.0.0.0、127.0.0.1 和 localhost)。

我不确定我需要做什么才能完成这项工作。是否有一些特殊的方法可以从同一主机指定容器的 IP,一些我不知道的命名法?

在这一点上,我对 Docker 的基本操作“还可以”,但我远非专家,所以我有点迷茫。我一般也不是*nix的大用户,虽然我通常可以摸索大多数事情......但任何提示都会非常感激,因为我现在不知所措否则。

谢谢, 弗兰克

编辑 1:根据下面某人的要求,这是我的 pg_hba.conf 文件,减去 cmets:

    local   all             all                                     trust
    host    all             all             127.0.0.1/32            trust
    host    all             all             ::1/128                 trust
    local   replication     all                                     trust
    host    replication     all             127.0.0.1/32            trust
    host    replication     all             ::1/128                 trust

    host all all all md5

【问题讨论】:

  • 你能从 postgres 添加你的 pg_hba.conf 文件的内容吗?
  • @RSloeserwij 当然可以,请参阅原帖中的编辑 1。

标签: linux postgresql docker networking confluence


【解决方案1】:

尝试将 pg_hba.conf 文件的第二行更改为以下内容:

host    all    all    0.0.0.0/32    trust

这将导致 PostgreSQL 开始接受来自任何源地址的调用。由于 docker 容器在技术上不是在 localhost 上运行,而是在其自己的 ip 上运行,因此当前配置导致 PostgreSQL 阻止与它的任何连接。

同时检查 confluence 是否在 localhost 上搜索数据库。如果是这种情况,请将其更改为 docker 网络中主机的 ip。

【讨论】:

  • 感谢您的尝试(由于家里停电,我花了几天的时间才尝试过),但不幸的是,它并没有改变任何东西。我仍然可以从另一台机器上的 pgAdmin 访问它,但不能从同一台机器上另一个容器中的 Confluence 访问它。我也尝试过samehost和samenet,但它们也没有工作。还有其他建议吗?
  • 我添加了另一个可能的问题,你能帮我试试吗?
  • 嗨...是的,实际上我已经尝试过 IP 地址,主机的 IP,因为这就是我访问我运行的所有其他容器的方式(显然在不同的端口上)。我也尝试过 localhost、127.0.0.1 甚至 0.0.0.0(因为我在配置文件中看到了它,但不确定这是否是我不知道的 Docker 技巧)。没有工作。我的工作理论是,由于我所有的容器都使用相同的 IP,即主机的 IP,这就像一个糟糕的环回​​。想也许我必须给 Postgres 容器自己的 IP,但不知道该怎么做(如果可能的话)。
  • 你的 docker 守护进程应该有一个内部网络,通过名为 docker 的 ifconfig 可见。你所有的容器和主机都应该有一个 172.17.0.0/24 范围内的 ip。
【解决方案2】:

成功!解决方案是创建一个自定义网络,然后使用连接字符串中的图像名称从 Confluence 容器到 PostreSQL 容器。换句话说,我运行了这个:

docker network create -d bridge docker-net

然后,在 PostgreSQL 和 Confluence 容器的 docker run 命令中,我添加了:

--network=docker-net

这样,当我运行 Confluence 配置向导时,当它询问 PostgreSQL 服务器的主机名时,我使用 postgres(我给容器的名称)而不是 IP 地址或实际主机名。多亏了自定义网络,Docker 才能做到这一点。这也使容器可以通过主机的 IP 使用,因此例如我仍然可以通过 192.168.123.12:5432 连接到 PostgreSQL,当然我可以通过 192.168.123.12:8080 在浏览器中启动 Confluence。

仅供参考,我什至不必更改 pg_hba.conf 文件,我只使用了官方 PostgreSQL 映像(最新),这是理想的。

非常感谢 RSloeserwij 的建议......虽然它们都不是我需要的解决方案,但它们确实让我在 Docker 文档中走上了正确的轨道,经过阅读后,我明白了一些我以前没有做的事情,并找出我需要的配置魔法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多