【问题标题】:connect robomongo to mongoDB docker container将 robomongo 连接到 mongoDB docker 容器
【发布时间】:2016-06-13 17:31:46
【问题描述】:

我正在使用docker-compose 运行NodeJS 应用程序。一切正常,我可以通过连接到容器内的 Mongo 来查看我的所有数据。但是当我连接到RoboMongo 时,我没有看到任何数据。

我该如何处理这个问题?

【问题讨论】:

  • 您能否分享一些详细信息,或者可能是您迄今为止尝试过的截图?
  • 嘿 Siddharth Ajmera 我只是尝试使用 robomongo 查看我的数据,但它没有显示任何内容,mongoDB 在 docker 容器内运行
  • 您能在 RoboMongo 中看到您的数据库和集合吗?
  • 我只看到我的数据库名称,但没有显示集合:(
  • 双击您的收藏。您将在层次结构中获得 3 个文件夹:集合、函数、用户。双击您的收藏将显示您在该数据库中的收藏。

标签: mongodb docker robo3t


【解决方案1】:

还有另一种方法。你可以

  1. 通过 Robomongo SSH 连接到托管 Docker 应用程序的实际虚拟服务器(SSH 选项卡,选中“使用 SSH 隧道”并相应地填写其他字段)
  2. 现在 ssh 进入终端中的同一台机器。
  3. docker ps 应该会向您展示您的 MongoDB 容器。
  4. docker inspect <mongo container id> 将打印出有关该容器的完整信息。最后查找IPAddress,这将为您提供容器的本地IP。
  5. 在 Robomongo 的“连接”选项卡中,使用该容器 IP 进行连接。

另一个旁注: 确保您不以任何方式(Dockerfile 和 docker-compose.yml)公开您的 mongodb 服务端口,因为这将使您的数据库可以公开访问从各地。假设您没有为该服务设置用户名/密码,您很快就会被扫描和黑客攻击。

【讨论】:

  • 这对我来说是唯一有效的答案,因为我在云服务器上,我肯定不会公开我的数据库端口或更改我的任何容器。谢谢!
  • 我在我的 docker compose 文件中使用了 ecpose。这只会打开服务器内部的端口。所以你可以使用暴露但不能使用端口。这将为所有人打开它。有人不同意吗?
  • 查找 MongoDB 容器的 IP 地址很有用,谢谢。
【解决方案2】:

最简单的方法是启用转发 Mongo 容器本身,这是我的 docker-compose 的样子。

mongo:
  image: mongo
  restart: always
  ports:
    - 27017:27017

【讨论】:

  • 出于开发目的我使用这种方法
  • 我有相同的设置,但似乎我的 API 使用了不同的数据库(可能是 docker 容器中的那个)。我如何使用 Robo3T 或 Robomongo 等工具实际连接那里?
【解决方案3】:

您应该在 docker 容器内建立到 MongoDB 的 Robomongo SSH 隧道连接。首先你应该在你的 docker 容器中安装一个 ssh 服务器。

https://docs.docker.com/engine/examples/running_ssh_service/


之后,您应该在 Robomongo 中配置您的连接。 在“连接设置”内有您的 Robomongo 连接的配置选项卡。

转到“SSH”选项卡并配置与 docker 容器的 SSH 连接。之后转到“连接”选项卡并配置与 MongoDB 的连接,就好像它在 localhost 范围内一样。

【讨论】:

  • 对我不起作用,所以我找到了一个更符合 docker 理念的解决方法:按照描述制作一个 ssh docker,然后使用 -link _mymongodocker_ 参数(和端口映射)运行它22,所以我一定很容易找到它)。然后在 robomongo 而不是 localhost 我使用 mymongodocker (因为它是链接的,它可以从 ssh docker 获得)。即使 --link 已被弃用并且应该被更现代的方法取代,它也能像魅力一样工作,暂时来说,我太懒了:)
【解决方案4】:

我面临一个不同的问题。我已经在本地安装了 MongoDB。因此,当 docker 上的 MongoDB 运行时,它与我主机上运行的 MongoDB 发生冲突。我使用brew 安装了它。

所以,我跑了

brew services stop mongodb-community

然后我重新启动了 Robo3t。我看到 MongoDB 中创建的数据库在 docker 上运行。

瞧!

【讨论】:

  • 帮了忙的老兄!谢谢你的这个花絮。未来的人们阅读:如果您在尝试连接到在容器中运行的 mongo 之前使用 brew 安装了 mongo,请务必检查一下。
  • @finiteloop 很高兴能帮上忙 :)
  • 这应该是大多数情况下的首选解决方案。感谢这个人
  • @SeanKonig 很高兴能帮上忙 :)
【解决方案5】:

请注意,您可能无法使用 ssh,因为这只是 mongo 和 robomongo 不兼容的问题。

'Robomongo v8.5 及更低版本不支持 MongoDB 3'。与docker无关。

【讨论】:

    【解决方案6】:

    首先使用 ssh 登录详细信息

    1. ssh -i yourpemfile.pem 用户名@ipaddress

    2. 检查 MongoDB 的运行容器 ID

      docker ps -a

    3. 然后检查 mongo 容器 id

    docker 检查 container_id

    1. 然后打开robo3t

    创建新连接并添加容器 ID 使用 ssh 登录详细信息连接到 mongodb

    【讨论】:

      【解决方案7】:

      在您的 docker-compose 文件中,您可以向主机公开一个端口

      例如下面的代码会将机器内部的27017端口暴露给主机的27018端口。

      app:
        image: node
        volumes:
          - /app
        ports:
          - "27018:27017"
      

      然后,如果您安装了 docker-machine 并且您的机器是 default,您可以在终端中进行操作:

      docker-machine ip default
      

      它将为您提供主机的 ip,例如 192.168.2.3。您的数据库(主机)的地址将是 192.168.2.3 和端口 27018

      如果您的 docker 机器不是虚拟的并且是您的操作系统,那么您的数据库地址将是 localhost 和端口 27018

      【讨论】:

      • 是的 harchuck 这就是我所做的,但似乎对于 robomongo 它需要更多配置:)
      猜你喜欢
      • 2017-11-10
      • 2015-04-04
      • 2019-02-16
      • 2019-01-12
      • 2019-08-27
      • 1970-01-01
      • 2017-10-13
      • 2016-12-28
      • 2016-08-09
      相关资源
      最近更新 更多