Node.js 从docker容器连接到主机mongodb

Node.js 从docker容器连接到主机mongodb,node.js,mongodb,docker,networking,containers,Node.js,Mongodb,Docker,Networking,Containers,所以我想连接到主机上运行的mongodb(DoDroplet,Ubuntu16.04)。它在本地主机上的默认27017端口上运行 然后,我使用DO droplet将我的Meteor应用程序部署到DO droplet上,docker使用docker在容器中运行我的Meteor应用程序。到现在为止,一直都还不错。 标准mongodb://...连接url用于将应用程序连接到mongodb。 现在我有以下问题: mongodb://...@localhost:27017…显然在docker容器中不起作

所以我想连接到主机上运行的mongodb(DoDroplet,Ubuntu16.04)。它在本地主机上的默认
27017
端口上运行

然后,我使用DO droplet将我的Meteor应用程序部署到DO droplet上,docker使用docker在容器中运行我的Meteor应用程序。到现在为止,一直都还不错。 标准
mongodb://...
连接url用于将应用程序连接到mongodb。 现在我有以下问题:

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

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

  • --network=“host”
    -不起作用,因为它说
    0.0.0:80
    已经在使用或类似的东西(nginx代理)
  • --添加host=“local:”
    并通过
    mongodb://...@本地:27017…
    :也不工作,因为我只能从本地主机访问mongodb,不能从公共IP访问
这一定是一个常见的问题

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


我希望有人能帮忙

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

从docker 18.03起,将连接到特殊DNS名称
host.docker.internal


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

在/etc/mongod.conf中将bindIp从127.0.0.1更改为0.0.0.0。那就行了

你是我今天的英雄!谢谢!!在任何地方都找不到这个非常简单的答案。@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
不起作用。(我想从容器连接到主机上的服务)现在似乎有一个内置的DNS
HOST.docker.internal
用于容器连接主机。