首页 > 解决方案 > 连接到 MongoDB 查询路由器以在 windows10 上运行的 docker 容器上进行分片

问题描述

这是我之前的问题的后续。Alex Blex 的连接配置服务器的解决方案效果很好。但是我在连接到 MongoDB 查询路由器时遇到了同样的问题。

下面是我用来创建 mongos 服务器的命令

docker run -d -p 40001:27017 -v C:/mongodata/data/db --name QR mongo mongos --configdb rs1/172.30.35.165:30001,172.30.32.73:30002,172.30.42.189:30003 --bind_ip 0.0.0.0 --port 27017

但是我在执行时收到以下错误docker exec -it QR mongo -port 27017:-

连接到:mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb 错误:无法连接到服务器 127.0.0.1:27017,连接尝试失败:SocketException:连接到 127.0.0.1:27017 :: 时出错by :: 由于目标机器主动拒绝,无法建立连接。:connect@src/mongo/shell/mongo.js:374:17 @(connect):2:6 异常:连接失败退出代码1

以下是配置服务器的复制配置详细信息 -

config = {
          "_id": "rs1",
          "configsvr": true,
          "members":
            [
                {
                "_id": 0,
                "host": "6ed1d953f979:27019"
                },
                {
                "_id": 1,
                "host": "086f0ef5c955:27019"
                },
                {
                "_id": 2,
                "host": "391c9c07b341:27019"
                }
            ]
        }

这是容器 ID 和 IP 地址

------------------------------------------
Server      IP Address      Container ID 
------------------------------------------
asiaCS      172.30.35.165   6ed1d953f979
europeCS    172.30.32.73    086f0ef5c955
americaCS   172.30.42.189   391c9c07b341

我不确定我是否正确配置了 mongos。

标签: mongodbdockerwindows-10

解决方案


所以我想出了这个。显然配置服务器是轻量级的,不存储任何数据。因此,我们不需要将其绑定到卷。我首先将所有配置服务器绑定到一个固定 IP(这样 docker 不会在我每次停止和启动容器时为其分配新 IP)。但是为了这个答案,我将使用问题本身中提到的 IP。我使用以下命令创建了一个查询路由器。

docker run -d -p 40001:27017 --name QR --hostname QR mongo mongos --configdb "rs1/172.30.35.165:30001,172.30.32.73:30002,172.30.42.189:30003" --bind_ip 0.0.0.0

然后通过运行 docker exec'd 进入容器docker exec -it QR mongo

现在在连接到 mongos 时,如果它抛出连接被拒绝错误(问题中提到的那个),您可以使用以下命令 -

docker exec -it QR mongos --configdb "rs1/172.30.35.165:30001,172.30.32.73:30002,172.30.42.189:30003"

上面的命令将在没有分离模式的情况下启动 mongos,并且日志将开始出现在您的CMDPowerShell(无论您以何种方式运行命令)控制台上。

我在本地有 mongo shell,我打开了另一个CMD提示符并执行了以下命令 -

C:\MongoShell\bin> mongosh --host IpAddressOfMongos --port 27017

瞧,它连接成功。然后,您可以关闭在附加模式下运行 docker exec 命令的初始控制台。

mongos 的 IP 地址可以通过docker inspect QR.


推荐阅读