![](/img/trans.png)
[英]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.