Node.js mongoose与副本集的连接始终失败

Node.js mongoose与副本集的连接始终失败,node.js,mongodb,docker,mongoose,replicaset,Node.js,Mongodb,Docker,Mongoose,Replicaset,我很难理解如何连接到副本集-我需要.watch()收集事件,它需要副本集-请参阅:(我也遵循了此答案,不起作用-请参阅此问题的底部) 以下是我的设置: nodejs-express-api+mongoose 我的主要“管理员”mongo db(名为DEV) 3个mongo节点用于副本设置 我已使用此代码段使用docker compose设置了3个mongo节点: 版本:“3” 服务: mongo0: 主机名:mongo0 容器名称:mongo0 图片:mongo:最新 揭露: - 30000

我很难理解如何连接到副本集-我需要
.watch()
收集事件,它需要副本集-请参阅:(我也遵循了此答案,不起作用-请参阅此问题的底部)

以下是我的设置:

  • nodejs-express-api+mongoose
  • 我的主要“管理员”mongo db(名为
    DEV
  • 3个mongo节点用于副本设置
我已使用此代码段使用docker compose设置了3个mongo节点:

版本:“3”
服务:
mongo0:
主机名:mongo0
容器名称:mongo0
图片:mongo:最新
揭露:
- 30000
端口:
- 30000:30000
卷数:
-mongodb_repl_data1:/data/db
重新启动:始终
命令:“--bind_ip_all--replSet rs0--port 30000”
mongo1:
主机名:mongo1
集装箱名称:mongo1
图片:mongo:最新
揭露:
- 30001
端口:
- 30001:30001
卷数:
-mongodb_repl_data2:/data/db
重新启动:始终
命令:“--bind_ip_all--replSet rs0--port 30001”
mongo2:
主机名:mongo2
货柜名称:mongo2
图片:mongo:最新
揭露:
- 30002
端口:
- 30002:30002
卷数:
-mongodb_repl_data3:/data/db
重新启动:始终
命令:“--bind_ip_all--replSet rs0--port 30002”
卷数:
mongodb_repl_数据1:
mongodb_repl_数据2:
mongodb_repl_数据3:
运行良好,我可以
docker exec-it mongo--port
进入所有容器上的mongo shell

我的主要“管理”mongo db位于27017端口

我正试图这样与他们联系:

等待猫鼬。连接(“mongodb://localhost:30000,localhost:30001,localhost:30002,localhost:27017/DEV?replicaSet=rs0“{
useNewUrlParser:true,
useUnifiedTopology:正确
})
当我运行时,它挂起在这个
connect()
,然后抛出:

初始化mongo连接失败:MongooseServerSelectionError:getaddrinfo ENOTFOUND mongo0
在NativeConnection.Connection.openUri(/Users/zac/Projects/score/app/application/server/node\u modules/mongoose/lib/Connection.js:821:32)
at/Users/zac/Projects/score/app/application/server/node_modules/mongoose/lib/index.js:342:10
at/Users/zac/Projects/score/app/application/server/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:5
在新的承诺下(

从“mongodb拓扑管理器”导入{ReplSet};
导出默认异步()=>{
//在端口31000、31001、31002、副本集上启动3节点副本集
//名字是“rs0”。
const replSet=new replSet('mongod',[{options:{port:31000,dbpath:`${{uu dirname}/data/db/31000`,bind_ip:'localhost'},
{选项:{port:31000,dbpath:`${{u_dirname}/data/db/31001`,bind_ip:'localhost'}},
{选项:{port:31001,dbpath:`${{u_dirname}/data/db/31001`,bind_ip:'localhost'}},
{选项:{port:31002,dbpath:`${{u_dirname}/data/db/31002`,bind_ip:'localhost'}}
],{replSet:'rs0'});
试一试{
log(“rep set discovering…”);
等待replSet.discover()
日志(“代表集清除…”);
等待replSet.purge();
log(“rep set start…”);
等待replSet.start();
log(“repsetdone”);
}捕捉(错误){
console.error(“启动副本集失败:”,err);
}
}
但是如果我运行它,它总是挂起
replSet.start()
,永远挂起。db路径存在,端口不在其他地方使用

rep set discovering...
rep set purging...
rep set starting...
简单地说,我如何正确地启动mongodb repl集并通过mongoose连接到它?如果我需要在本地(不在Docker中)拥有repl集,我如何使用我的一个本地mongodb实例来实现这一点(这样我就可以通过命令
$mongo
$mongod
,而不是通过Docker来访问它们)


非常感谢您的帮助

getaddrinfo-ENOTFOUND-mongo0
看起来像是名称解析错误
getaddrinfo-ENOTFOUND-mongo0
看起来像是名称解析错误