我有一个运行在默认端口27017的MongoDB数据库,它位于一个Docker容器中。
有没有一种方法可以使用MongoDB Compass GUI直接在我的Ubuntu操作系统上连接到数据库?
docker run -p 27018:27017
命令后,您可以使用主机上的端口 27018 从 Compass 连接。我认为没有必要暴露所有端口。
docker run --name <custom-name> -p 27018:27017 -d mongo:<tag-name>
这个命令会下载Docker镜像并部署/启动容器。 - Ram27107:27107
也应该可以工作。为什么要更改主机端口? - OneCricketeerdocker run --name <custom-name> -p 27017:27017 -d mongo:<tag-name>
。然后,我能够在 MongoDB Compass 中使用 mongodb://localhost:27017/
作为我的连接字符串。 - Oscar将连接字符串中的 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
使用 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
即可。 - ahmed hamdy使用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文件来设置和部署副本集。
是的,我们能够运行
步骤:
Pull/Restart the docker container mongodb
Enter the bash shell
docker exec -it mongodb bash
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:
Mongodb Compass:
mongodb://user:password@localhost:27017/dbname?authSource=dbname&readPreference=primary&gssapiServiceName=mongodb&appname=MongoDB%20Compass&ssl=false
请注意,保留了HTML标记。docker run --name mongodb -d -p 27017:27017 mongo
mongodb://localhost:27017
成功连接。
但是,如果我尝试连接到以Testcontainers开头的容器,只有在我使用mongodb://localhost:27017?directConnection=true
时才能正常工作。
directConnection=true
是唯一对我有效的方法。 - undefinedError 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)
docker run -p 27017:27017 --name some-mongo mongo:4.0
。不需要身份验证。
sudo docker ps
,它将显示您拥有的docker容器,在其中可以找到mongodb的端口号,然后运行命令sudo mongodb-compass
,它将打开mongodb compass。使用 --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
docker inspect your_container_name
来获取容器的 IP 地址,然后尝试使用 Compass 建立连接呢?你试过这样做了吗? - tgogos