从docker容器连接到主机mongodb

Pat*_*der 13 networking containers mongodb node.js docker

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

然后我使用mup在我的DO droplet上部署我的Meteor应用程序,它使用docker在容器内运行我的Meteor应用程序.到现在为止还挺好.标准mongodb://...连接URL用于将应用程序连接到mongodb.现在我有以下问题:

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

我已经在这上面阅读了很多stackoverflow帖子,我已经尝试过使用:

  • --network="host"- 没有工作,因为它0.0.0.0:80已经在使用或类似的东西(nginx代理)
  • --add-host="local:<MY-DROPLET-INTERNET-IP>"和连接通过mongodb://...@local:27017...:也没有工作,因为我只能从localhost访问我的mongodb,而不是从公共IP

这必须是一个常见的问题!

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

我希望有人能帮帮忙!

Rob*_*ert 22

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

从docker 18.03开始,建议连接到特殊的DNS名称host.docker.internal

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

  • `docker.for.mac.localhost`对我的情况非常有用,`0.0.0.0`不起作用. (4认同)