Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Robo 3T连接到Docker MongoDB容器_Mongodb_Docker_Robo3t - Fatal编程技术网

将Robo 3T连接到Docker MongoDB容器

将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地址

作为解决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地址为:

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