我在我的代码中使用 MongoDB 更改流,需要创建一个启用更改流的 MongoDB docker 映像。问题是应该首先使用默认设置启动 mongod 以允许创建用户、文档等。然后应该停止 mongod。然后应该将副本集添加到 mongod.conf 以启用更改流:
# mongod.conf
replication:
replSetName: rs0
oplogSizeMB: 100
之后应该再次启动 mongod 并由 MongoDB shell 初始化副本集:
rs.slaveOk()
rs.initiate()
rs.initiate({_id:"rs0", members: [{"_id":1, "host":"127.0.0.1:27017"}]})
MogodDB 3.6基础镜像提供了初始化功能。你知道如何启动 mongod,初始化 DB 然后停止它并重新配置吗?
UPD:我需要初始化数据库然后添加副本集。因此,我需要使用默认的 mongod.conf 运行 mongod,创建用户和集合,然后使用另一个启用了副本集的 mongod、conf 重新启动 mongod。我不能用官方的 MongoDB 图像来做到这一点。我已经在 Ubuntu 映像上安装了 MongoDB 3.6.12。在 bash shell 中手动运行设置命令后,我的 MongoDB 容器运行良好,但相同的指令在 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)