使用 mongodb compass GUI 连接到 docker 内的 Mongodb

Posted

技术标签:

【中文标题】使用 mongodb compass GUI 连接到 docker 内的 Mongodb【英文标题】:connecting to Mongodb inside a docker with mongodb compass GUI 【发布时间】:2018-09-04 17:30:17 【问题描述】:

我在 docker 容器的默认端口 27017 上运行了一个 mongodb 数据库。

有没有办法使用在我的 ubuntu 操作系统上本地运行的 mongodb compass GUI 连接到数据库?

【问题讨论】:

你为什么不docker inspect your_container_name 获取它的 IP 地址,然后尝试与 Compass 建立连接。你试过了吗? 运行容器的命令是什么? @tgogos 感谢您的友好回复,这很有效。 【参考方案1】:

docker run -p 27018:27017,然后在您的主机上使用 27018 端口从 Compass 连接。我认为没有理由公开所有端口。

【讨论】:

为避免混淆,确切的命令是(在 Mac OS 上):docker run --name <custom-name> -p 27018:27017 -d mongo:<tag-name> 这个命令确实会下载 docker 映像并部署/启动容器【参考方案2】:

在连接字符串中将localhost替换为您的IP地址,例如,我的IP地址是10.1.2.123然后我有mongodb://10.1.2.123:27017?readPreference=primary&appname=MongoDB%20Compass&ssl=false

在这里看到这个?:https://nickjanetakis.com/blog/docker-tip-35-connect-to-a-database-running-on-your-docker-host

【讨论】:

这对我来说很关键。【参考方案3】:

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

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

【讨论】:

在此更改后必须通过 mongodb://127.0.0.1:27017 使用 Compase 访问 MongoDB【参考方案4】:

是的,我们可以运行

步骤:

    拉取/重启 docker 容器 mongodb

    进入 bash 外壳

    docker exec -it mongodb bash
    

    现在打开 mongodb compass 社区,使用相同的默认连接点击连接,docker 容器的 mongodb 将连接到 compass 社区。​​p>

我的终端运行 docker:

MongoDB指南针:

【讨论】:

我不明白你的回答。在使用 compass 连接到 mongo DB 之前,我是否需要先打开 bash shell?我们不能没有它吗? 为避免混淆,确切的命令是(在 Mac OS 上):docker run --name <custom-name> -p 27018:27017 -d mongo:<tag-name> 这个命令确实会下载 docker 映像并部署/启动容器【参考方案5】:

我可以在最后使用这些标签将 Windows 上的指南针连接到 docker:

mongodb://user:password@localhost:27017/dbname?authSource=dbname&readPreference=primary&gssapiServiceName=mongodb&appname=MongoDB%20Compass&ssl=false

【讨论】:

【参考方案6】:

使用 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 文件来设置和部署副本集。

【讨论】:

【参考方案7】:

如果您使用过类似的环境,只需打开指南针并在内部连接添加凭据

ME_CONFIG_MONGODB_ADMINUSERNAME=admin

然后点击连接。无需额外设置。 或者你可以使用 mongo-express,它是一个基于 web 的 Monodb UI 工具。

【讨论】:

【参考方案8】:

运行命令sudo docker ps 它将显示您拥有的 docker 容器,您可以在其中找到 mongodb 的端口号 运行命令sudo mongodb-compass 它将打开 mongodb 指南针

如果您在本地连接,那么一般主机名是:localhost 然后只需输入端口号并点击connect

【讨论】:

【参考方案9】:

我也无法使用 Compass 连接到本地 MongoDB,但发现这是 SSL 问题。默认情况下,Compass 将 SSL 设置为“系统 CA”。但是,如果您尝试使用 dockerized 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。无需身份验证。

【讨论】:

【参考方案10】:

使用 'publish-all-ports' 选项 (docker run -P) 运行您的 mongo 容器。然后您应该能够通过docker ps -a 检查暴露给主机的端口并从 Compass 连接到它(只需使用您的主机名:localhost 和端口:<exposed port>)。

【讨论】:

以上是关于使用 mongodb compass GUI 连接到 docker 内的 Mongodb的主要内容,如果未能解决你的问题,请参考以下文章

用 MongoDB Compass 可视化工具连接 MongoDB 数据库的详细过程

踩坑记录-连接 MongoDB Compass Community 报错

在 Ubuntu 上通过 Compass 加载 MongoDB Atlas 时出错

13个Mongodb GUI可视化管理工具

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

MongoDB—— 客户端MongoDB Compass