将 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.
无关
还有一个办法。你可以
- 使用 Robomongo 通过 SSH 连接到托管您的 docker 应用程序的实际虚拟服务器(SSH 选项卡,选中 "Use SSH tunnel" 并相应地完成其他字段)
- 现在在您的终端中通过 ssh 连接到同一台机器。
docker ps
应该会显示您的 MongoDB 容器。
docker inspect <mongo container id>
将打印出有关该容器的完整信息。最后查找 IPAddress
,这将为您提供容器的本地 IP。
- 在 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登录详细信息
ssh -i yourpemfile.pem 用户名@ip地址
检查 运行 容器 ID MongoDB
docker ps -a
然后检查 mongo 容器 ID
docker 检查 container_id
- 然后打开robo3t
创建新连接并添加容器 ID
使用 ssh 登录详细信息连接到 mongodb
我是 运行 一个 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.
无关还有一个办法。你可以
- 使用 Robomongo 通过 SSH 连接到托管您的 docker 应用程序的实际虚拟服务器(SSH 选项卡,选中 "Use SSH tunnel" 并相应地完成其他字段)
- 现在在您的终端中通过 ssh 连接到同一台机器。
docker ps
应该会显示您的 MongoDB 容器。docker inspect <mongo container id>
将打印出有关该容器的完整信息。最后查找IPAddress
,这将为您提供容器的本地 IP。- 在 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登录详细信息
ssh -i yourpemfile.pem 用户名@ip地址
检查 运行 容器 ID MongoDB
docker ps -a
然后检查 mongo 容器 ID
docker 检查 container_id
- 然后打开robo3t
创建新连接并添加容器 ID 使用 ssh 登录详细信息连接到 mongodb