如何让docker容器可以访问postgres.app数据库?

我得到了postgres.app在我的Mac本地运行,并希望我的本地docker容器能够连接到它。 我如何最好地做到这一点?

我发现这个post,build议使用–add-host标志( 数据库到Docker容器的主机端口 )将Docker主机的IP地址传递到容器 。 但是,我的笔记本电脑的IP地址经常变化。 有没有更简单的方法来做到这一点? 有没有一种简单的方法来打开本地端口到容器?

一些事情

  • 使用docker.for.mac.localhost作为你的HOST(这里假定你有docker.for.mac.localhost提到的最新的Docker for Mac)
  • 确保~/Library/Application Support/Postgres/var-9.6/pg_hba.conf有这样的logging

host all all 0.0.0.0/0 trust

  • ~/Library/Application Support/Postgres/var-9.6/postgresql.conf更改这一行listen_addresses = 'localhost'

listen_addresses = '*'

要么

listen_addresses = 'localhost, docker.for.mac.localhost'

如果我们正在谈论开发人员工作站,则可以在主机networking中启动Docker容器。

 docker run --net=host myContainer 

所以你的容器和主机运行在同一个栈中,并且应该可以访问你的postgres.app。

从您的容器中,尝试连接到主机名docker.for.mac.localhost 。 例如:

 psql -U my_user docker.for.mac.localhost -U my_user my_database 

从文档 :

Mac有一个不断变化的IP地址(如果你没有networking访问权限,则没有)。 从17.06开始,我们的build议是连接到特殊的仅限于Mac的DNS名称docker.for.mac.localhost ,该名称将parsing为主机使用的内部IP地址。

注意:这需要Docker for Mac >= 17.06.0-ce-mac18, 2017-06-28