mongodb - 连接到 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。
解决方案
所以我想出了这个。显然配置服务器是轻量级的,不存储任何数据。因此,我们不需要将其绑定到卷。我首先将所有配置服务器绑定到一个固定 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,并且日志将开始出现在您的CMD
或PowerShell
(无论您以何种方式运行命令)控制台上。
我在本地有 mongo shell,我打开了另一个CMD
提示符并执行了以下命令 -
C:\MongoShell\bin> mongosh --host IpAddressOfMongos --port 27017
瞧,它连接成功。然后,您可以关闭在附加模式下运行 docker exec 命令的初始控制台。
mongos 的 IP 地址可以通过docker inspect QR
.
推荐阅读
- c++ - 将类声明为指针的好处?
- c - PostgreSQL C 扩展:函数调用之间的持久数据
- apache-kafka - 端到端程序以删除 kafka 主题
- python - Python如何将Series类型:对象转换为int
- asp.net - Devexpress Gridview 中的按钮没有响应
- typescript - 正确键入异步获取函数的返回值
- javascript - 找不到模块:错误:无法解析“fs”
- android - 不可转换的类型;无法将“android.support.v4.app.Fragment”转换为“com.google.android.libraries.places.widget.AutocompleteSupportFragment”
- android - Google Play 广告系列归因实施中的问题
- android - 从设置中更改权限并重新打开应用程序