Linux Can';t从容器连接到我的docker主机postgresql数据库
如果我执行Linux Can';t从容器连接到我的docker主机postgresql数据库,linux,postgresql,docker,networking,fedora,Linux,Postgresql,Docker,Networking,Fedora,如果我执行ifconfig,docker0ip是172.17.0.1,当我运行我的集装箱化应用程序,然后docker network inspect bridgemyapp ip是172.17.0.2时,我想它们在同一个网络上 但在我的应用程序中,我试图连接到docker主机的postgresql数据库,我向我的ORM提供了172.17.0.1:5432,但它抛出了一个错误connect-econnrefluse172.17.0.1:5432 问题出在哪里?检查postgres实例数据目录中的p
ifconfig
,docker0
ip是172.17.0.1
,当我运行我的集装箱化应用程序,然后docker network inspect bridge
myapp ip是172.17.0.2
时,我想它们在同一个网络上
但在我的应用程序中,我试图连接到docker主机的postgresql数据库,我向我的ORM提供了172.17.0.1:5432
,但它抛出了一个错误connect-econnrefluse172.17.0.1:5432
问题出在哪里?检查postgres实例数据目录中的pg_hba.conf文件。在此文件中,您可以配置允许哪些用户通过哪个网络进行身份验证。通过添加以下行,确保您的postgres实例正在接受来自docker0网络的连接:
host all all 172.17.0.0/24 md5
在这一行中,您可以调整第二个“all”来指定某个用户。我忘记在
postgresql.conf
中添加listen\u addresses=“*”
。您使用哪个操作系统?Windows、Mac或Linux?@KitHsu我使用的是Fedora 27我想PostgreSQL安装在主机上,而不是容器中。如果我是对的,我们应该确保PostgreSQL工作良好,并且还可以在docker0上进行监听。探测端口活跃度的典型方法是在主机上运行nc-v 172.17.0.1 5432或netstat-np | grep 5432以查看端口状态。如果端口处于活动状态,请尝试禁用SELinux。我已禁用SELinux,而且postgresql在端口5432
上运行良好,我真的看不出问题。看起来容器正在阻止此端口上的连接。好的,我找到了它不工作的原因,感谢您的回答,我的postgresql安装从所有连接接受md5,但我没有在我的postgresql.conf
中使用listen\u addresses=“*”
。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@DerekBrown这确实为这个问题提供了答案。因为我的问题的特点是一个问题,这就是它如何解决我的问题。