将Robo 3T连接到Docker MongoDB容器

时间:2019-04-05 14:27:37

标签: mongodb docker robo3t

作为尝试解决Hibernate OGM连接问题的一部分,我想查看是否从Robo 3T连接。

我构建MongoDB映像并开始运行。

docker ps:

  

MacBook-Pro:GoStopHandle NOTiFY $ docker ps容器ID图像
  命令创建的状态端口   名称0375a68b9988 gostophandlemongodb:latest
  “ docker-entrypoint.s…” 5秒前上了4秒
  0.0.0.0:32844->27017/tcp goStopHandleMongo

容器的IP地址为:

  

docker inspect -f'{{范围   .NetworkSettings.Networks}} {{。IPAddress}} {{end}}'0375a68b9988   172.17.0.2

我进入了'mongo'外壳:

  

docker exec -it goStopHandleMongo mongo管理员

我添加了用户名和密码:

__mongometa__

然后我在Robo 3T中创建一个连接: Robo 3T - create connection

然后我设置“身份验证”:

Authentication

当我尝试连接时,我得到:

Connection dialog

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

要进行连接,您只需在Robo3T上与localhost:27017连接即可。

问题源于容器的内部IP与外部IP之间的混淆。内部IP是您在Docker网络中与您的主机网络隔离的容器的地址(除非明确桥接)。执行docker inspect命令时,您在docker网络上获取了容器的IP。

您的容器正在docker网络中的0.0.0.0:32844上侦听,并通过端口映射到端口27017暴露给主机。因此,如果您在docker网络中有另一个容器 ,则您应该使用172.17.0.2:32844访问您的服务。但是,如果您在docker网络之外有任何东西,则应该使用localhost:27017[your host IP]:27017访问mongodb。

希望这会有所帮助!

答案 1 :(得分:1)

直到我不得不重新启动Mac之后,我才意识到我仍然在运行MongoDB的本地实例,因此我没有连接到MongoDB的Docker实例,但是我的本地(已安装Brew)实例。

一旦我看到@Artjom Zabelin回答here并且“别忘了将端口映射到主机端口”

docker run --name some-mongo -p 27017:27017 -d mongo

它已连接到运行我的容器的MongoDB。

@Frank Yucheng Gu是正确的,我需要'localhost'。

答案 2 :(得分:0)

就我而言,我在Mac OSX上运行docker,而docker使用了我的主机IP地址,因此docker inspect CONTAINER_ID --format '{{ .NetworkSettings.IPAddress }}'会给我一个空字符串。在Mac OSX和Windows上,Docker主机地址为host.docker.internal。因此,在将robo 3t上的主机地址设置为host.docker.internal

之后,我能够连接到在docker中运行的mongodb实例