
[英]Connect to MongoDB Replica Set running inside Docker with Java (Windows)
[英]Implement docker mongodb replica set config settings inside .yml file
我设置了一个运行正常的 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)
所以我想出了一个办法,希望对你有帮助。下面我将发布 my.yml 文件、rsinit 文件和 rs.sh 文件,所有文件都应该放在同一个位置才能工作,rest 无论如何都要编写所有配置。
.yml 文件:
版本:'3.7' 服务:mongo1:主机名:mongo1 容器名称:localmongo1 图像:mongo 公开:- 27017 端口:- 27017:27017 重启:始终入口点:[“/usr/bin/mongod”、“--bind_ip_all”、“ --replSet", "rs0"] # volumes: # - /data/db/mongotest:/data/db # 这是你的卷将持续存在的地方。 例如 VOLUME-DIR =./volumes/mongodb
mongo2:主机名:mongo2 容器名称:localmongo2 图像:mongo 公开:- 27017 端口:- 27018:27017 重启:始终入口点:[“/usr/bin/mongod”、“--bind_ip_all”、“--replSet”、“rs0 "]
mongo3:主机名:mongo3 container_name:localmongo3 图像:mongo 公开:- 27017 端口:- 27019:27017 重启:始终入口点:[“/usr/bin/mongod”、“--bind_ip_all”、“--replSet”、“rs0 "]
rsinit:构建:上下文:。 dockerfile:rsinit 依赖于:- mongo1 - mongo2 - mongo3 入口点:[“sh”,“-c”,“rs.sh”]
rsinit(普通文本文件):
从蒙哥
添加 rs.sh /usr/local/bin/
运行 chmod +x /usr/local/bin/rs.sh
rs.sh 文件:
echo "准备 rs 启动"
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)' ) if [[ $mongo1 == 1 ]] && [[ $mongo2 == 1 ]] && [[ $mongo3 == 1 ]]; 然后 init_rs 否则 check_db_status fi }
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.