没有在新configuration1中描述的主机将副本集my-mongo-set映射到此节点

我正在使用Docker来设置一个MongoDB集群。

我有一个bash脚本启动三个容器共享一个网桥,以便他们可以相互交谈。 我可以连接到networking中的所有MongoDB数据库。

NodeJS脚本将群集的成员添加到networking。

docker rm -v -f mongo0 docker rm -v -f mongo1 docker rm -v -f mongo2 docker network create my-mongo-cluster docker run -d \ -p 30002:27017 \ --name mongo0 \ --net my-mongo-cluster \ mongo mongod --replSet my-mongo-set docker run -d \ -p 30003:27017 \ --name mongo1 \ --net my-mongo-cluster \ mongo mongod --replSet my-mongo-set docker run -d \ -p 30004:27017 \ --name mongo2 \ --net my-mongo-cluster \ mongo mongod --replSet my-mongo-set node setupDatabase.js 

NodeJS脚本:

 async function configure() { let database = await connect(); let adminDb = database.admin(); await addMembers(adminDb); await returnStatus(adminDb); } async function connect() { return await MongoClient.connect("mongodb://localhost:30002/test"); } async function addMembers(admin) { var config = { "_id" : "my-mongo-set", "members" : [ { "_id" : 0, "host" : "mongo0:30002" }, { "_id" : 1, "host" : "mongo1:30003" }, { "_id" : 2, "host" : "mongo2:30004" } ]}; return admin.command({replSetInitiate : config}); } async function returnStatus(admin) { return admin.command({replSetGetStatus : 1}); } 

每当我调用addMembers我得到以下错误:

没有在新configuration1中描述的主机将副本集my-mongo-set映射到此节点

根据我的理解,这意味着MongoDB无法连接到给定的成员。 但他们都有自己的名字,共享一个网桥。 所以他们应该能够互相连接。

任何想法是什么导致这个问题?

复制集configuration是容器到容器,因此需要内部地址和端口container:27017

 var config = { "_id" : "my-mongo-set", "members" : [ { "_id" : 0, "host" : "mongo0:27017" }, { "_id" : 1, "host" : "mongo1:27017" }, { "_id" : 2, "host" : "mongo2:27017" } ]}; 

可以通过Docker映射端口进行连接,但是您需要使用Docker主机可以响应的主机名/地址。 它也会包括不必要的networking跳出去和回到容器。