【问题标题】:connect to mongodb from docker从 docker 连接到 mongodb
【发布时间】:2020-04-21 12:42:43
【问题描述】:

我有一个 MongoDB 在我的主机上运行,​​ip 为 127.0.0.1:27017。我需要从 docker 映像连接到我的 MongoDB。所以我尝试使用这些地址:

localhost:27017

0.0.0.0:27017

但我的连接被拒绝。是关于 mongodb 身份验证吗?我还没有在我的主机上启用 mongodb 身份验证。

【问题讨论】:

  • 如果正在运行的 Docker 容器 localhost 是容器,而不是您的 docker 主机。查看这篇文章,了解连接 Docker 主机的一种可能方式:forums.docker.com/t/…

标签: mongodb docker


【解决方案1】:

正如 Ralf 在您的 cmets 中所说,容器内部的“localhost”指的是容器本身。

解决此问题的一种方法是在容器中运行 MongoDB,然后使用 docker-compose 运行两个容器并让它们相互通信。

例如,您的(精简的、不完整的)docker-compose.yml 文件看起来像:

version: "3.3"
services:
  mongo:
    image: mongo:4.0.11-xenial
    ports:
      - 27017:27017
  your-app:
    # settings dependant on whatever your app is
    depends_on:
      - mongo

然后,当您尝试通过应用程序连接时,您可以使用 mongodb://<user>:<pass>@mongo/YourDatabase 进行连接,因为 Docker 会将 mongo 映射到您的 mongo 服务。

【讨论】:

  • 那么实际上现在有连接到在 docker 主机中运行的数据库的方法吗?我能够让它工作的唯一方法是绑定 0.0.0.0 并在 mongo db url 中使用完整的主机静态 IP。但当然这是一个安全问题,所以我不希望这样。
  • 我知道的唯一方法是上面描述的 docker-compose 方法,但只有当您的应用程序和数据库都在 Docker 创建的同一个虚拟网络中运行时才有效(例如,通过 docker-撰写)。
猜你喜欢
  • 2017-10-03
  • 2018-01-09
  • 1970-01-01
  • 2017-06-11
  • 2019-02-24
  • 2021-12-25
  • 1970-01-01
  • 2016-06-13
  • 2019-02-16
相关资源
最近更新 更多