繁体   English   中英

使用 mongodb 罗盘 GUI 连接到 docker 内的 Mongodb

[英]connecting to Mongodb inside a docker with mongodb compass GUI

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

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

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

Replace localhost with your IP address in the connection string, eg, my IP address is 10.1.2.123 then I have 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

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

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

是的,我们可以运行

脚步:

  1. 拉/重启 docker 容器 mongodb

  2. 输入 bash shell

     docker exec -it mongodb bash
  3. 现在打开 mongodb compass 社区,使用相同的默认连接只需单击连接,docker 容器的 mongodb 将连接到 compass 社区。

我的终端运行 docker:
我的终端运行 docker

Mongodb 指南针:
MongoDB指南针

使用 docker 检查或 docker 桌面检查并找到暴露端口

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

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

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

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

ME_CONFIG_MONGODB_ADMINUSERNAME=admin

并点击连接。无需其他设置。 或者您可以使用 mongo-express,它是一个基于 web 的 UI 工具,用于 monodb。

Run command sudo docker ps it will show docker containers you have where you can find the port number of mongodb the run the command sudo mongodb-compass it will open the mongodb compass

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

我也无法使用 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 无需认证。

在此处输入图像描述

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

这个解决方案对我有用。

使用以下命令运行 docker 容器:

docker run -d --name mongo-db -v ~/mongo/data:/data/db -p 27017:27017 mongo

-v 用于将本地卷映射到 docker 可写空间。 即使容器被销毁,这也将保留数据。

MongoDB 连接字符串 罗盘 GUI:

mongodb://localhost:27017

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

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

所以现在我们可以使用mongodb://localhost:27017将 mongodb 与指南针连接起来

另一方面要连接,只需使用 docker 检查命令获取 docker 容器 IPAddress 并使用该 ip 地址而不是 localhost

mongodb://172.17.0.2:27017

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM