连接到 MongoDB 查询路由器以在 windows10 上的 docker 容器 运行 上进行分片

Connect to MongoDB query router for Sharding on a docker container running on windows10

这是我的 . 的跟进,用于连接到配置服务器,效果很好。但是我在连接到 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 时得到以下错误:-

connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: No connection could be ma de because the target machine actively refused it. : connect@src/mongo/shell/mongo.js:374:17 @(connect):2:6 exception: connect failed exiting with code 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。

所以我想出了这个。显然配置服务器重量轻,不存储任何数据。因此,我们不需要将其绑定到卷。我首先将所有配置服务器绑定到一个固定的 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 通过 运行 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 在附加模式下执行命令。

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

找到