Linux Docker can中的汇流';在Docker中看不到PostgreSQL

Linux Docker can中的汇流';在Docker中看不到PostgreSQL,linux,postgresql,docker,networking,confluence,Linux,Postgresql,Docker,Networking,Confluence,我正试图在Docker中设置Confluence和PostgreSQL。我已经在我最新的CentOS 6机器上安装并运行了它们,并将卷映射到主机文件系统,因此我可以轻松地备份它们。我可以使用pgAdmin从另一台机器连接到PostgreSQL,而且我可以从同一台机器的浏览器进入Confluence。因此,基本上,这两个应用程序似乎都在各自的容器中按预期运行,并且可以被外部世界访问,这当然排除了我的问题的所有可能性 问题是Confluence在初始设置期间无法与PostgreSQL通信,这是它正常

我正试图在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的基本操作“还行”,但我远不是专家,所以我有点迷路了。我也不是一个大时间*尼克斯用户一般来说,虽然我通常可以摸索我的方式通过大多数事情。。。但任何提示都将不胜感激,否则我现在就不知所措

谢谢, 坦率的

编辑1:根据下面某人的请求,这是我的pg_hba.conf文件,没有注释:

    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

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

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


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

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

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


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

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

docker网络创建-d桥docker网络

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

--网络=docker网络

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

仅供参考,我甚至不需要修改pg_hba.conf文件,我只是使用了官方的PostgreSQL映像(最新版本),这非常理想


非常感谢RSloeserwij的建议。。。虽然没有一个是我所需要的解决方案,但他们确实让我在Docker文档中走上了正确的轨道,经过一些阅读,这让我了解了一些我以前没有了解的事情,并找到了我需要的配置魔法。

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

docker网络创建-d桥docker网络

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

--网络=docker网络

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

仅供参考,我甚至不需要修改pg_hba.conf文件,我只是使用了官方的PostgreSQL映像(最新版本),这非常理想


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

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