将 robomongo 连接到 mongoDB docker 容器

connect robomongo to mongoDB docker container

我是 运行 一个 NodeJS 应用 docker-compose. Everything works fine and I can see all my data by connecting to Mongo inside container. But when I connect to RoboMongo 我没有看到任何数据。

我该如何处理这个问题?

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

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


之后您应该在 Robomongo 中配置您的连接。 "Connection Settings" 里面有你的 Robomongo 连接的配置选项卡。

转到 "SSH" 选项卡并配置与 docker 容器的 SSH 连接。之后转到 "Connection" 选项卡并配置与 MongoDB 的连接,就好像它在本地主机范围内一样。

在您的 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 机器不是虚拟的,而是你的 OS,你的数据库地址将是 localhost 和端口 27018.

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

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

无关

还有一个办法。你可以

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

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

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

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

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

安装了它

所以,我运行

brew services stop mongodb-community

然后我重新启动了 Robo3t。我在 docker.

上看到 MongoDB 运行 中创建的数据库

瞧!

首先使用ssh登录详细信息

  1. ssh -i yourpemfile.pem 用户名@ip地址

  2. 检查 运行 容器 ID MongoDB

    docker ps -a

  3. 然后检查 mongo 容器 ID

docker 检查 container_id

  1. 然后打开robo3t

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