将Robo 3T连接到Docker MongoDB容器
作为解决Hibernate OGM连接问题的尝试的一部分,我想看看我是否从Robo 3T连接 我构建我的MongoDB映像并开始运行 docker ps: MacBook Pro:GoStopHandle通知$docker ps容器ID图像将Robo 3T连接到Docker MongoDB容器,mongodb,docker,robo3t,Mongodb,Docker,Robo3t,作为解决Hibernate OGM连接问题的尝试的一部分,我想看看我是否从Robo 3T连接 我构建我的MongoDB映像并开始运行 docker ps: MacBook Pro:GoStopHandle通知$docker ps容器ID图像 命令创建状态端口 名称0375a68b9988 gostophandlemongodb:最新版本 “docker entrypoint.s…”5秒前上升4秒 0.0.0.0:32844->27017/tcp goStopHandleMongo 容器的IP地址
命令创建状态端口 名称0375a68b9988 gostophandlemongodb:最新版本
“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管理员 我添加一个用户和密码:
> 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中创建一个连接:
然后设置“身份验证”:
当我尝试连接时,我得到:
有什么建议吗?要连接,您只需在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
或[您的主机IP]:27017
访问mongodb
希望这有帮助 直到我不得不重新启动Mac,我才意识到我仍然有一个MongoDB的本地实例在运行,因此我没有连接到我的MongoDB Docker实例,而是连接到我的本地(Brew安装)实例 有一次,我看到@Artjom Zabelin回答“别忘了将端口映射到主机端口” 它连接到运行我的容器的MongoDB
@Frank Yucheng Gu说得对,我需要“本地主机” 在我的例子中,我在Mac OSX上运行docker,docker使用的是我的主机IP地址,因此,
docker inspect CONTAINER_ID——格式“{{.NetworkSettings.IPAddress}}”
会给我一个空字符串。Mac OSX和Windows上的Docker主机地址为host.Docker.internal
。因此,在将robo 3t上的主机地址设置为host.docker.internal
之后,我能够连接到docker中运行的mongodb实例,谢谢。果不其然,我已经停止了我的“localhost”版本的MongoDB,我可以在Robo 3T中使用127.0.0.1进行连接,并且可以运行使用Mongo DB的JBoss WildFly本地实例。那也行。我的Docker容器是否使用(原始)“data/db”文件夹中的集合?我以为我必须在Docker文件中“添加”一个文件夹?如果我想从WildFly Docker容器连接到MongoDB Docker容器,我需要使用“172.17.0.2:32844”,这一假设正确吗?如果没有看到Dockerfile和docker运行有关文件夹使用情况的命令,很难说。是的,您可以使用IP:端口从另一个容器连接到MongoDB,这是正确的。但是,如果您正在运行多个容器服务,则应该考虑使用DOCKER组合来在本地编排它们。问题是IP地址可能会发生更改,并可能导致后续问题。如果您使用docker compose创建了堆栈,您可以使用服务名称和端口来引用容器,而不是使用非持久性IP。非常感谢。对于创建Docker容器来说是相当新的。请看docker-compose。多亏了这个答案。我一直在挠头,为什么我不能用robo3t连接到它。在我的例子中,我的本地mongo服务器在默认27017下运行,所以我将其转发到27018:27017。因此,我能够连接到Robo3t中的localhost:27018,我惊讶地发现需要-p 27017:27017
。谢谢
docker run --name some-mongo -p 27017:27017 -d mongo