我正在使用 Docker 设置 MongoDB 集群。
我有一个 bash 脚本,它启动三个共享网桥的容器,以便它们可以相互通信。我可以连接到网络中的所有 MongoDB 数据库。
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
我收到以下错误:
副本集 my-mongo-set 的新配置 1 中描述的主机没有映射到此节点
根据我的理解,这意味着 MongoDB 无法连接到给定的成员。但它们都有自己的名字并共享一个网桥。所以他们应该能够相互连接。
有什么想法导致这个问题吗?
复制集配置是容器到容器的,因此需要内部容器地址和端口container-name: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 主机可以响应的主机名/地址。它还将包括不必要的网络跃点来退出和返回容器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)