。yml文件中的实现docker mongodb副本集配置设置

问题描述 投票:0回答:1

我已经设置了可以正常运行的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)
mongodb docker-compose config replicaset rs
1个回答
0
投票

所以我想出了一种方法,希望对您有所帮助。下面,我将发布我的.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文件:

!/ bin / bash

回显“准备启动”

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

© www.soinside.com 2019 - 2024. All rights reserved.