让 主机 上 的 PostgreSQL 示例 接受 来自 Docker 网桥 网络 的 连接 , 而 无需 硬 编码 Docker IP 地址

pbwdgjma  于 2022-11-22  发布在  Docker
关注(0)|答案(3)|浏览(156)

PostgreSQL数据库只是直接安装到linux主机中(而不是作为docker容器)。
在一个docker容器(使用docker compose构建)中,我有一个需要连接到数据库的应用程序。
客户机容器需要在码头桥网络上,并且不能直接在主机网络上,因为它需要到达桥网络上的其它容器。
我使用host.docker.internal主机名as described here连接到Postgres数据库。
从这个容器中我可以访问数据库,这样就没有问题了。但是PostgreSQL需要允许pg_hba.conf中的这个连接,否则我会得到错误:
没有主机“www.example.com“的pg_hba.conf条目172.22.0.3
当然,我可以将该IP地址添加到pg_hba.conflike done here,但这不会给予非常稳定的解决方案,因为IP地址不会总是相同的。
最佳做法是什么?允许来自172...* 的所有连接?还是...?

e0bqpujr

e0bqpujr1#

我很肯定,默认情况下,docker有一些dns服务,你可以把hostname写入pg_hba.conf而不是ip地址。postgres试图解析这些名称,但可能只有在读取conf时,所以你可能需要经常运行pg_ctlcluster reload,比如替换客户端容器。
如果你只为那些真正需要连接的容器打开postgres,这会更干净、更安全。另一方面,如果打开的端口是ssl,并且有密码保护,而你的其他容器可以被认为是可信的,那么允许所有容器连接就不是什么高风险的事情了。

gr8qqesn

gr8qqesn2#

唯一的好做法是在容器中移动PostgreSQL,就像你遵循其他好做法一样(比如运行Docker无根模式),你的容器应用程序不应该访问你的任何主机接口。

yiytaume

yiytaume3#

现在我已经在pg_hba.conf文件中添加了一个samenet entry。我不确定这是否是最好的方法,所以我很高兴收到更多的建议。

# to enable local docker connections:
host    all             all             samenet         md5

相关问题