【问题标题】:Docker postgres connection from *inside* docker container to host machine's postgres localhost instance on a Mac从 *inside* docker 容器到 Mac 上主机的 postgres localhost 实例的 Docker postgres 连接
【发布时间】:2020-01-26 14:38:40
【问题描述】:

关于 SO 的所有问题似乎都涉及创建 postgres container 并从 Mac 主机连接它的相反情况。但我试图做相反的事情,但没有成功。我在我的 Mac 主机上运行 localhost,尽管设置了端口标志,但我无法在容器中获取代码来与我的 localhost postgres 通信(与远程主机 postgres 通信就好了)。

docker run -it -p 5000:5000 -p 5432:5432 yard-stats

然后在docker里面:

telnet 0.0.0.0 5432
Trying 0.0.0.0...
telnet: Unable to connect to remote host: Connection refused

或 telnet 127.0.0.1 或 localhost。连接被拒绝。

编辑:我也尝试使用标志 --network="host",除了中断与 localhost:5000 上容器的入站连接外,它没有改变任何东西。

【问题讨论】:

  • 尝试 telnet 到 docker 网桥的 IP 在大多数情况下 IP 是 172.17.0.1 所以:“telnet 172.17.0.1 5432” 要查找 docker 网桥 IP 地址类型:“ip a|grep docker0”
  • 我试过了,没有骰子。不过谢谢。

标签: postgresql macos docker


【解决方案1】:

如果你使用 docker for mac,你可以使用 host.docker.internal 特殊的 DNS 名称,它解析为主机使用的内部 IP 地址。


您还可以使用--network="host" 与您的 docker run 命令一起在主机网络中运行容器。那么容器内的localhost接口在宿主网络中运行时将与宿主机的localhost接口相同。所以你应该可以使用localhost:5432 连接到postgresql。您可以删除-p 选项,因为它在使用--network="host" 运行时无效。

docker run -it --network=host yard-stats

【讨论】:

  • host.docker.internal 工作!我只需要告诉 postgres 接受该 dns,因为它似乎对 postgres 被阻止,但对 telnet 却没有。 network="host" 标志不起作用。
  • 准确地说,我得到了这个错误:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 130, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: FATAL: role "root" does not exist 有什么想法吗?
  • 我想通了——我在本地主机上使用了一个空白用户名!
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2016-07-20
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2019-03-16
  • 2021-09-11
相关资源
最近更新 更多