7

Я использую docker-compose для запуска 3 серверов MongoDB, которые должны быть в наборе реплик.Настройка набора реплик MongoDB из docker-compose

Сначала я запускаю 3 сервера MongoDB, затем настраиваю набор реплик. Это, как я хотел бы сделать реплики набора конфигурации в bash script:

mongo --host 127.0.0.1:27017 <<EOF 
var cfg = { 
    "_id": "rs", 
    "version": 1, 
    "members": [ 
     { 
      "_id": 0, 
      "host": "127.0.0.1:27017", 
      "priority": 1 
     }, 

     // snip... 

    ] 
}; 
rs.initiate(cfg); 
rs.reconfig(cfg) 
EOF 

Здесь я пытаюсь повторить конфигурирование набора реплик с помощью докер-компоновать.

# docker-compose.yml 

mongosetup: 
    image: mongo:3.0 
    links: 
    - mongo1:mongo1 
    command: echo 'var cfg = { "_id": "rs", "version": 1, "members": [ { "_id": 0, "host": "127.0.0.1:27017", "priority": 1 }, { "_id": 1, "host": "mongo2:27017", "priority": 1 },{ "_id": 2, "host": "mongo2:27017", "priority": 1 } ] }; rs.initiate(cfg);' | mongo mongo1 

К сожалению, эта ошибка генерирует: yaml.scanner.ScannerError: mapping values are not allowed here.

Какой рекомендуемый подход? Возможно ли сохранить объект cfg в отдельном файле, который читает docker-compose?

ответ

9

Я исправил проблему, поместив конфигурацию в setup.sh, которую я вызвал из точки входа.

mongosetup: 
    image: mongo:3.0 
    links: 
    - mongo1:mongo1 
    - mongo2:mongo2 
    - mongo3:mongo3 
    volumes: 
    - ./scripts:/scripts 
    entrypoint: [ "/scripts/setup.sh" ] 

setup.sh

#!/bin/bash 

MONGODB1=`ping -c 1 mongo1 | head -1 | cut -d "(" -f 2 | cut -d ")" -f 1` 

mongo --host ${MONGODB1}:27017 <<EOF 
    var cfg = { 
     "_id": "rs", 
     "version": 1, 
     "members": [ 
      { 
       "_id": 0, 
       "host": "${MONGODB1}:27017", 
[cut..] 
EOF 

Я создал установку с Докер-композе, который начинается 3 MongoDBs в набор репликации и ElasticSearch с MongoDB-реки.

Доступно с https://github.com/soldotno/elastic-mongo

Смежные вопросы