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

标签 node.js mongodb docker networking containers

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

然后我使用 mup在我的 DO droplet 上部署我的 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,而不是从公共(public) IP

这一定是个常见问题!

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

希望有人能帮忙!

最佳答案

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

关于node.js - 从 docker 容器连接到主机 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45461017/

相关文章:

Node.js Express : BodyParser Syntax

mongodb - Mongo 升级后停止工作

docker - Airflow Docker Operator 无法在本地计算机上找到 .sock 文件

node.js - 使用本地 dynamodb 客户端的 dynamo-client

javascript - Node.JS/Javascript - 将字符串转换为整数会返回 NaN,而我不希望它返回

node.js - 如何在 'message' 监听器上删除 Redis

MongoDb 获取最后几个文档和 await tailable 游标

grails - 易于扩展 mongodb 与 mysql

postgresql - 如何配置 PostgreSQL ODBC 驱动程序

node.js - 重新启动 Docker 内运行的 Ghost 博客