将Robo 3T连接到Docker MongoDB容器

问题描述 投票:0回答:2

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

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

docker ps:

MacBook-Pro:GoStopHandle NOTiFY $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0375a68b9988 gostophandlemongodb:latest “docker-entrypoint.s ...”5秒前上升4秒 0.0.0.0:32844->27017/tcp goStopHandleMongo

容器的IP地址是:

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

我进入'mongo'外壳:

docker exec -it goStopHandleMongo mongo admin

我添加了一个用户名和密码:

> db.createUser(
...   {
...     user: "NOTiFY",
...     pwd: "MyPassword",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
...   }
... )
Successfully added user: {
    "user" : "NOTiFY",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        "readWriteAnyDatabase"
    ]
}

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

然后我设置'身份验证':

Authentication

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

Connection dialog

有什么建议?

mongodb docker robo3t
2个回答
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
投票

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

有一次我看到@Artjom Zabelin回答here和“别忘了将端口映射到主机端口”

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.