我已经设置了可以正常运行的MongoDB副本集。但是我想在.yml中运行配置设置,而不是在副本集节点内部初始化。
通过配置设置,我的意思是:
1。
config = {
"_id": "comments",
"members": [
{
"_id": 0,
"host": "node1:27017"
},
{
"_id": 1,
"host": "node2:27017"
},
{
"_id": 2,
"host": "node3:27017"
}
]
}
及以下内容:
2。
rs.initiate(config)
所以我想出了一种方法,希望对您有所帮助。下面,我将发布我的.yml文件,rsinit文件和rs.sh文件,所有文件都应放置在同一位置以便工作,其余所有配置均已写入无论如何。
。yml文件:
版本:“ 3.7”服务:mongo1:主机名:mongo1container_name:localmongo1图片:蒙哥暴露:-27017端口:-27017:27017重启:总是入口点:[“ / usr / bin / mongod”,“ --bind_ip_all”,“ --replSet”,“ rs0”]#卷:#-/ data / db / mongotest:/ data / db#这是您的卷将保留的位置。例如VOLUME-DIR = ./volumes/mongodb
mongo2:主机名:mongo2container_name:localmongo2图片:蒙哥暴露:-27017端口:-27018:27017重启:总是入口点:[“ / usr / bin / mongod”,“ --bind_ip_all”,“ --replSet”,“ rs0”]
mongo3:主机名:mongo3container_name:localmongo3图片:蒙哥暴露:-27017端口:-27019:27017重启:总是入口点:[“ / usr / bin / mongod”,“ --bind_ip_all”,“ --replSet”,“ rs0”]
rsinit:建立:内容:。dockerfile:rsinit依赖于取决于:-mongo1-mongo2-mongo3入口点:[“ sh”,“-c”,“ rs.sh”]
rsinit(普通文本文件):
FROM mongo
ADD rs.sh / usr / local / bin /
运行chmod + x /usr/local/bin/rs.sh
rs.sh文件:
回显“准备启动”
check_db_status(){mongo1 = $(mongo --host mongo1 --port 27017 --eval“ db.stats()。ok” | tail -n1 | grep -E'(^ | \ s)1($ | \ s)')mongo2 = $(mongo --host mongo2 --port 27017 --eval“ db.stats()。ok” | tail -n1 | grep -E'(^ | \ s)1($ | \ s)')mongo3 = $(mongo --host mongo3 --port 27017 --eval“ db.stats()。ok” | tail -n1 | grep -E'(^ | \ s)1($ | \ s)')如果[[$ mongo1 == 1]] && [[$ mongo2 == 1]] && [[$ mongo3 == 1]];然后init_rs其他check_db_status科幻}
init_rs(){ret = $(mongo --host mongo1 --port 27017 --eval“ rs.initiate({_id:'rs0',成员:[{_id:0,主机:'mongo1:27017'},{_id:1, host:'mongo2:27017'},{_id:2,host:'mongo3:27017'}]})“”> / dev / null 2>&1)}
check_db_status> / dev / null 2>&1
回声“ rs initiating finish”出口0