连接到 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,并且日志将开始出现在您的 CMD
或 PowerShell
上(无论您是 运行命令)控制台。
我的本地有 mongo shell 我打开了另一个 CMD
提示符并执行了下面的命令 -
C:\MongoShell\bin> mongosh --host IpAddressOfMongos --port 27017
瞧,连接成功。然后,您可以关闭您所在的初始控制台 运行 docker 在附加模式下执行命令。
mongo 的 IP 地址可以通过 docker inspect QR
.
找到
这是我的
下面是我用来创建 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,并且日志将开始出现在您的 CMD
或 PowerShell
上(无论您是 运行命令)控制台。
我的本地有 mongo shell 我打开了另一个 CMD
提示符并执行了下面的命令 -
C:\MongoShell\bin> mongosh --host IpAddressOfMongos --port 27017
瞧,连接成功。然后,您可以关闭您所在的初始控制台 运行 docker 在附加模式下执行命令。
mongo 的 IP 地址可以通过 docker inspect QR
.