Как включить поток изменений в образе докера для MogoDB 3.6? - PullRequest
0 голосов
/ 11 мая 2019

Я использую поток изменений MongoDB в своем коде и мне нужно создать образ докера MongoDB с включенным потоком изменений.Проблема в том, что сначала нужно запустить mongod с настройками по умолчанию, чтобы разрешить создание пользователей, документов и т. Д. Затем следует остановить mongod.Затем набор реплик должен быть добавлен в mongod.conf для включения потока изменений:

# mongod.conf
replication:
  replSetName: rs0
  oplogSizeMB: 100

После этого mongod должен быть снова запущен и набор реплик инициализирован оболочкой MongoDB:

rs.slaveOk()
rs.initiate()
rs.initiate({_id:"rs0", members: [{"_id":1, "host":"127.0.0.1:27017"}]})

MogodDB 3.6 базовый образ обеспечивает возможности инициализации.Вы знаете, как запустить mongod, инициализировать базу данных, затем остановить ее и перенастроить?

UPD: мне нужно инициализировать базу данных, затем добавить набор реплик.Поэтому мне нужно запустить nongod с mongod.conf по умолчанию, создать пользователей и коллекции, затем перезапустить mongod с другим mongod, в котором включен набор реплик.Я не могу сделать это с официальным изображением MongoDB.Я установил MongoDB 3.6.12 на образ Ubuntu.Мой контейнер MongoDB работает хорошо после запуска команд установки вручную в своей оболочке bash, но те же инструкции не работают из Dockerfile. Вот команды

RUN mongod --fork --config /etc/mongod.conf \
     && mongo < /opt/init_mongodb.js \
     && mongod --shutdown --dbpath /var/lib/mongodb \
     && cp /etc/mongod.conf /etc/mongod.conf.orig \
     && mongod --fork --config /opt/mongod.conf \
     && mongo -u "root" -p "root" --authenticationDatabase "admin" <  /opt/reconfig_mongodb.js \

При запуске этих команд из Dockerfile появляется следующая ошибка

> backend@1.0.0 start /usr/src/app
> npm run babelserver

> backend@1.0.0 babelserver /usr/src/app
> babel-node --presets es2015 index.js

(node:41) UnhandledPromiseRejectionWarning: MongoError: not master and slaveOk=false
    at queryCallback (/usr/src/app/node_modules/mongodb-core/lib/cursor.js:248:25)
    at /usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:532:18
    at processTicksAndRejections (internal/process/task_queues.js:82:9)
(node:41) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

1 Ответ

0 голосов
/ 18 мая 2019

Решено путем инициализации набора реплик при запуске контейнера.Этот сценарий установлен как ENTRYPOINT в файле Docker

#!/bin/sh
# start mongod, initialize replica set
mongod --fork --config /opt/mongod.conf
mongo --quiet < /opt/replica.js
# restart mongod    
mongod --shutdown --dbpath /var/lib/mongodb
mongod --config /opt/mongod.conf

replica.js

rs.slaveOk()
rs.initiate()
rs.initiate({_id:"rs0", members: [{"_id":1, "host":"127.0.0.1:27017"}]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...