7

Tôi đang sử dụng docker-compose để khởi động 3 máy chủ MongoDB cần được đặt trong một bản sao.Đặt cấu hình bản sao MongoDB từ docker-compose

Lần đầu tiên tôi khởi động 3 máy chủ MongoDB, sau đó tôi định cấu hình bộ bản sao. Đây là cách tôi sẽ làm bản sao bộ config trong một 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 

Ở đây tôi đang cố gắng để tái tạo các cấu hình của bộ bản sao sử dụng Docker-soạn.

# 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 

Thật không may là tạo lỗi này: yaml.scanner.ScannerError: mapping values are not allowed here.

Cách tiếp cận được đề xuất là gì? Có thể lưu trữ đối tượng cfg trong một tệp riêng biệt mà các trình soạn thảo docker-compose đọc không?

Trả lời

9

Tôi đã khắc phục sự cố bằng cách đặt cấu hình trong setup.sh mà tôi đã gọi từ điểm nhập cảnh.

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 

tôi đã tạo ra một thiết lập với Docker-soạn bắt đầu 3 MongoDBs trong một bản sao thiết lập và ElasticSearch với MongoDB-sông.

Có sẵn tại https://github.com/soldotno/elastic-mongo

Các vấn đề liên quan