将 Robo 3T 连接到 Docker MongoDB 容器
Connecting Robo 3T to Docker MongoDB container
作为尝试解决 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 seconds ago Up 4 seconds
0.0.0.0:32844->27017/tcp goStopHandleMongo
容器的 IP 地址是:
docker inspect -f '{{range
.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 0375a68b9988
172.17.0.2
我输入了 'mongo' shell:
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 中创建一个连接:
然后我设置 'Authentication':
当我尝试连接时,我得到:
有什么建议吗?
要连接,您只需在 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
希望对您有所帮助!
直到我不得不重新启动我的 Mac,我才意识到我仍然有一个 MongoDB 运行 的本地实例,因此我不是连接到我的 Docker 实例 MongoDB 但我的本地(安装了 Brew)实例。
一旦我看到@Artjom Zabelin 回答 和 "Don't forget to map port to host port"
docker run --name some-mongo -p 27017:27017 -d mongo
它连接到 MongoDB 运行 我的容器。
@Frank Yucheng Gu 说得对,我需要'localhost'。
就我而言,我在 Mac OSX 运行 docker OSX 上 docker 使用了我的主机 IP 地址,结果 docker inspect CONTAINER_ID --format '{{ .NetworkSettings.IPAddress }}'
会给我一个空字符串。 Docker Mac OSX 和 Windows 上的主机地址是 host.docker.internal
。因此,在将 robo 3t 上的主机地址设置为 host.docker.internal
后,我能够连接到 docker 中的 mongodb 实例 运行
作为尝试解决 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 seconds ago Up 4 seconds
0.0.0.0:32844->27017/tcp goStopHandleMongo
容器的 IP 地址是:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 0375a68b9988 172.17.0.2
我输入了 'mongo' shell:
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 中创建一个连接:
然后我设置 'Authentication':
当我尝试连接时,我得到:
有什么建议吗?
要连接,您只需在 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
.
希望对您有所帮助!
直到我不得不重新启动我的 Mac,我才意识到我仍然有一个 MongoDB 运行 的本地实例,因此我不是连接到我的 Docker 实例 MongoDB 但我的本地(安装了 Brew)实例。
一旦我看到@Artjom Zabelin 回答
docker run --name some-mongo -p 27017:27017 -d mongo
它连接到 MongoDB 运行 我的容器。
@Frank Yucheng Gu 说得对,我需要'localhost'。
就我而言,我在 Mac OSX 运行 docker OSX 上 docker 使用了我的主机 IP 地址,结果 docker inspect CONTAINER_ID --format '{{ .NetworkSettings.IPAddress }}'
会给我一个空字符串。 Docker Mac OSX 和 Windows 上的主机地址是 host.docker.internal
。因此,在将 robo 3t 上的主机地址设置为 host.docker.internal