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.conf
like done here,但这不会给予非常稳定的解决方案,因为IP地址不会总是相同的。
最佳做法是什么?允许来自172...* 的所有连接?还是...?
3条答案
按热度按时间e0bqpujr1#
我很肯定,默认情况下,docker有一些dns服务,你可以把hostname写入pg_hba.conf而不是ip地址。postgres试图解析这些名称,但可能只有在读取conf时,所以你可能需要经常运行
pg_ctlcluster reload
,比如替换客户端容器。如果你只为那些真正需要连接的容器打开postgres,这会更干净、更安全。另一方面,如果打开的端口是ssl,并且有密码保护,而你的其他容器可以被认为是可信的,那么允许所有容器连接就不是什么高风险的事情了。
gr8qqesn2#
唯一的好做法是在容器中移动PostgreSQL,就像你遵循其他好做法一样(比如运行Docker无根模式),你的容器应用程序不应该访问你的任何主机接口。
yiytaume3#
现在我已经在pg_hba.conf文件中添加了一个
samenet
entry。我不确定这是否是最好的方法,所以我很高兴收到更多的建议。