从docker-composeconfigurationMongoDB副本集

我正在使用docker-compose来启动3个应该在副本集中的MongoDB服务器。

我首先启动3个MongoDB服务器,然后configuration副本集。 这是我将如何在bash脚本中执行副本集configuration:

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复制副本集的configuration。

 # 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读取的单独文件中?

我解决了问题,把configuration放在我从入口点调用的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 

我创build了一个docker-compose的设置,在一个副本集合中启动3个MongoDB,在MongoDB中启动ElasticSearch。

它可以在https://github.com/soldotno/elastic-mongo上find