【问题标题】:Connect to host mongodb from docker container从 docker 容器连接到主机 mongodb
【发布时间】:2018-01-09 16:33:15
【问题描述】:

所以我想连接到在我的主机上运行的 mongodb(DO droplet,Ubuntu 16.04)。它在 localhost 的默认 27017 端口上运行。

然后我使用mup 在我的 DO 液滴上部署我的 Meteor 应用程序,它使用 docker 在容器内运行我的 Meteor 应用程序。到目前为止,一切都很好。 一个标准的 mongodb://... 连接 url 用于将应用程序连接到 mongodb。 现在我有以下问题:

mongodb://...@localhost:27017... 显然在 docker 容器中不起作用,因为localhost 不是主机的本地主机。

我已经阅读了很多关于此的 stackoverflow 帖子,我已经尝试过使用:

  • --network="host" - 没有像它所说的那样工作 0.0.0.0:80 已经在使用或类似的东西(nginx 代理)
  • --add-host="local:<MY-DROPLET-INTERNET-IP>" 并通过 mongodb://...@local:27017... 连接:也无法正常工作,因为我只能从本地主机访问我的 mongodb,而不能从公共 IP 访问

这一定是个常见问题!

tl;dr - 在 docker 容器中公开主机 localhost 以便我可以连接到主机上运行的服务的正确方法是什么? (包括它们的端口,例如 27017)。

希望有人能帮忙!

【问题讨论】:

    标签: node.js mongodb docker networking containers


    【解决方案1】:

    您可以使用:172.17.0.1,因为它是容器可以看到的默认主机 IP。但是你需要配置Mongo来监听0.0.0.0

    从 docker 18.03 起the recommendation 是连接到特殊的DNS 名称host.docker.internal

    对于以前的版本,您可以使用 DNS 名称 docker.for.mac.localhostdocker.for.windows.localhost

    【讨论】:

    • 你好先生是我今天的英雄!非常感谢!!在任何地方都找不到这个非常简单的答案。
    • @Robert: 172.17.0.1 是 mongo 容器的 IP 地址还是默认网桥的网关 IP?我尝试了 172.17.0.1,但我的部署失败了。我的 mongodb 容器 IP 是 172.17.0.2。如果我提供该 IP,一切正常。但是,这些 IP 可能会根据特定容器的部署方式/时间而改变。
    • 172.17.0.1是网关IP,是运行docker的主机(不是容器)。是的,如果定义了自定义 docker 网络,该 IP 可能是另一个 IP。
    • docker.for.mac.localhost 对我来说非常有用,0.0.0.0 不起作用。
    • docs.docker.com/docker-for-mac/networking(我想从容器连接到主机上的服务)现在似乎有一个内置的 DNS host.docker.internal 用于容器连接主机。
    【解决方案2】:

    在 /etc/mongod.conf 中将 bindIp 从 127.0.0.1 更改为 0.0.0.0。然后就可以了

    【讨论】:

    • 请注意,如果在面向公众的服务器上绑定到 0.0.0.0 可能会导致安全问题。
    【解决方案3】:

    或在 ubuntu 上启动 mongod,并带有一个标志以绑定所有 IP 地址作为临时解决方法(开发/学习目的)

    $ mongod --bind_ip_all
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2018-04-11
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多