Mongodb 新配置1中描述的复制集my mongo set的主机没有映射到此节点

Mongodb 新配置1中描述的复制集my mongo set的主机没有映射到此节点,mongodb,docker,Mongodb,Docker,我正在使用Docker设置MongoDB集群 我有一个bash脚本,它启动了三个共享网桥的容器,以便它们可以相互通信。我可以连接到网络中的所有MongoDB数据库 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-

我正在使用Docker设置MongoDB集群

我有一个bash脚本,它启动了三个共享网桥的容器,以便它们可以相互通信。我可以连接到网络中的所有MongoDB数据库

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脚本将集群的成员添加到网络中

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
时,都会出现以下错误:

新配置1中描述的复制集my mongo set的主机没有映射到此节点

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


知道是什么导致了这个问题吗?

复制集配置为容器到容器,因此需要内部容器地址和端口
容器名称: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主机可以响应的主机名/地址。它还将包括不必要的网络跃点,以便进出容器。

这是容器到容器的配置,因此使用每个主机的内部端口,27017@Matt我是个白痴,谢谢!如果您创建一个答案,我可以接受您的答案作为解决方案。不用担心,在端口中处理端口很容易。回答已添加。这有助于我,我正在使用自定义端口,但不知道必须在主机字段中添加该自定义端口。