在Docker中使用MongoDB Compass GUI连接MongoDB

45

我有一个运行在默认端口27017的MongoDB数据库,它位于一个Docker容器中。

有没有一种方法可以使用MongoDB Compass GUI直接在我的Ubuntu操作系统上连接到数据库?


7
你为什么不使用命令 docker inspect your_container_name 来获取容器的 IP 地址,然后尝试使用 Compass 建立连接呢?你试过这样做了吗? - tgogos
2
你正在使用哪个命令来运行容器? - Yuankun
2
@tgogos 谢谢您的友善回复,那个方法起作用了。 - samsung gather
14个回答

38

docker run -p 27018:27017 命令后,您可以使用主机上的端口 27018 从 Compass 连接。我认为没有必要暴露所有端口。


7
为了避免混淆,Mac OS上的确切命令是: docker run --name <custom-name> -p 27018:27017 -d mongo:<tag-name> 这个命令会下载Docker镜像并部署/启动容器。 - Ram
1
27107:27107 也应该可以工作。为什么要更改主机端口? - OneCricketeer
1
完美地为我工作。我在 Mac OS 上运行了 docker run --name <custom-name> -p 27017:27017 -d mongo:<tag-name>。然后,我能够在 MongoDB Compass 中使用 mongodb://localhost:27017/ 作为我的连接字符串。 - Oscar

16

1
这对我来说非常关键。 - D'Arcy Rail-Ip
不应该这样做。正如其他答案所说,localhost将可以正常工作。 - OneCricketeer

15

使用 docker-compose,您只需暴露端口 27017。当您在 GUI 中点击“连接”时,它将自动检测此连接。

version: "3"
services:
  mongo-database:
    container_name: mongo-database
    image: mongo:4
    ports:
      - 27017:27017

3
更改后必须使用Compass访问MongoDB,只需使用mongodb://127.0.0.1:27017即可。 - ahmed hamdy

7

使用docker inspect或docker desktop查找暴露的端口

docker inspect your_container_name

并找到这个部分

       "Ports": {
            "27017/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "27012"
                }
            ]
        },

然后使用这个URL字符串连接

mongodb://localhost:27012/?readPreference=primary&appname=MongoDB%20Compass&ssl=false

如果您使用副本集,则不要传入副本集名称,否则连接将失败。这是因为您已部署了一个副本集,而不是将独立实例转换为副本集。

如果您不知道如何部署副本集,请留言,我可以提供一个docker-compose文件来设置和部署副本集。


但是你为什么一开始要将主机27012映射到容器端口27017呢? - OneCricketeer
我尝试了其他答案,但根据第一个问题的回复,这个对我有效。我正在使用Windows 11,并且使用docker inspect <image>对我有用。连接使用0.0.0.0:27107。 - Vicente Matus

6

是的,我们能够运行

步骤:

  1. Pull/Restart the docker container mongodb

  2. Enter the bash shell

    docker exec -it mongodb bash
    
  3. Now open the mongodb compass community and with same default connection just click connect and the docker container's mongodb will be connected to compass community.

我的终端运行Docker:
我的终端运行Docker

Mongodb Compass:
Mongodb Compass


4
我不理解你的回答。我需要先打开bash shell,然后使用Compass连接到MongoDB吗?难道我们不能不打开bash shell就完成操作吗? - Muhammad Tariq

2
我可以使用以下标签将Windows上的指南针连接到Docker: mongodb://user:password@localhost:27017/dbname?authSource=dbname&readPreference=primary&gssapiServiceName=mongodb&appname=MongoDB%20Compass&ssl=false 请注意,保留了HTML标记。

2
在我的情况下,如果我按照Massimiliano_Marcon所做的那样。
docker run --name mongodb -d -p 27017:27017 mongo

然后可以使用字符串mongodb://localhost:27017成功连接。

enter image description here

但是,如果我尝试连接到以Testcontainers开头的容器,只有在我使用mongodb://localhost:27017?directConnection=true时才能正常工作。

enter image description here


1
directConnection=true 是唯一对我有效的方法。 - undefined

1
我也遇到了使用Compass连接本地MongoDB的问题,但发现这是一个SSL问题。默认情况下,Compass将SSL设置为“System CA”。然而,如果您尝试在docker化的Mongo中使用此设置,则Mongo日志将显示以下错误:
Error receiving request from client: SSLHandshakeFailed: SSL handshake received but server is started without SSL support. Ending connection from 172.17.0.1:45902 (connection id: 12)
end connection 172.17.0.1:45902 (0 connections now open)

因此,要连接,我必须点击“逐个填写连接字段”,然后将SSL字段设置为“无”。供参考,我使用以下命令运行Mongo: docker run -p 27017:27017 --name some-mongo mongo:4.0。不需要身份验证。

enter image description here


1
运行命令sudo docker ps,它将显示您拥有的docker容器,在其中可以找到mongodb的端口号,然后运行命令sudo mongodb-compass,它将打开mongodb compass。
如果您是本地连接,则通用主机名为:localhost,然后只需输入端口号并单击connect

0

使用 --net=host 选项可以让 Docker 容器与主机共享网络命名空间。

docker run -it --net=host -v mongo_volume:/data/db --name mongo_example4 -d mongo

现在,我们可以使用 mongodb://localhost:27017 连接 MongoDB 和 Compass。

另一方面,要连接其他容器,只需使用 docker inspect 命令获取 Docker 容器的 IP 地址,然后使用该 IP 地址代替 localhost 即可。

mongodb://172.17.0.2:27017


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接