从docker容器连接到主机mongodb

时间:2017-08-02 12:33:05

标签: node.js mongodb docker networking containers

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

然后我使用mup在我的DO Droplet上部署我的Meteor应用程序,它使用docker在容器内运行我的Meteor应用程序。到现在为止还挺好。 标准mongodb://...连接网址用于将应用连接到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 - 在docker容器中公开主机localhost的正确方法是什么,以便我可以连接到主机上运行的服务? (包括他们的港口,例如27017)。

我希望有人可以提供帮助!

2 个答案:

答案 0 :(得分:18)

您可以使用: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

答案 1 :(得分:0)

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

相关问题