所以我想出了一个方法,希望对你有帮助。下面我将发布我的 .yml 文件、rsinit 文件和 rs.sh 文件,所有文件都应该放在同一个位置才能工作,其余所有配置都是还是写好了。
.yml 文件:
版本:'3.7'
服务:
蒙哥1:
主机名:mongo1
容器名称:localmongo1
图片:蒙哥
暴露:
- 27017
端口:
- 27017:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
# 卷:
# - /data/db/mongotest:/data/db # 这是你的卷将持续存在的地方。例如VOLUME-DIR = ./volumes/mongodb
mongo2:
主机名:mongo2
容器名称:localmongo2
图片:蒙哥
暴露:
- 27017
端口:
- 27018:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
mongo3:
主机名:mongo3
容器名称:localmongo3
图片:蒙哥
暴露:
- 27017
端口:
- 27019:27017
重启:总是
入口点:["/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0"]
rsinit:
建造:
语境: 。
dockerfile: rsinit
取决于:
- 蒙戈1
- mongo2
- mongo3
入口点:["sh", "-c", "rs.sh"]
rsinit(普通文本文件):
来自蒙哥
添加 rs.sh /usr/local/bin/
运行 chmod +x /usr/local/bin/rs.sh
rs.sh 文件:
!/bin/bash
echo "准备启动"
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', members: [{ _id: 0, host: 'mongo1:27017' }, { _id: 1,主机:'mongo2:27017'},{_id:2,主机:'mongo3:27017'}]})" > /dev/null 2>&1)
}
check_db_status > /dev/null 2>&1
echo "rs 启动完成"
0号出口