无法使用docker-compose运行具有副本集的mongo容器

这是我的docker-compose文件:

version: '3'

services:

mongo:

hostname: mongo

container_name: search_mongo

image: mongo:latest

volumes:

- ./docker/local/persist/mongo:/data/db

- ./docker/mongo:/opt/mongo

ports:

- "8884:27017"

- "8885:27018"

entrypoint: /opt/mongo/entrypoint_mongo.sh

agent:

build: .

image: myapp_search:compose

depends_on:

- mongo

这是我的entrypoint_mongo.sh

#!/bin/bash

mongod --port 27018 --replSet rs0 --fork --syslog --smallfiles

mongo --port 27018 --eval "rs.initiate({_id : 'rs0', members : [{_id : 0, host : 'mongo:27018'}]})"

mongo --port 27018 --eval "while(true) {if (rs.status().ok) break;sleep(1000)};"

我面临的问题是:mongo容器正在成功执行所有步骤,但是退出时的状态为0。

mongo_1          | about to fork child process, waiting until server is ready for connections.

mongo_1 | forked process: 7

mongo_1 | child process started successfully, parent exiting

mongo_1 | MongoDB shell version v3.4.10

mongo_1 | connecting to: mongodb://127.0.0.1:27018/

mongo_1 | MongoDB server version: 3.4.10

mongo_1 | { "ok" : 1 }

mongo_1 | MongoDB shell version v3.4.10

mongo_1 | connecting to: mongodb://127.0.0.1:27018/

mongo_1 | MongoDB server version: 3.4.10

search_mongo exited with code 0

回答:

您的启动脚本不应初始化或监视副本集。这些应该是手动任务。

您应该记住:

  • 严格来说,启动副本集是一次性的工作;一旦启动,MongoDB服务在重新启动后将继续成为同一副本集的一部分。
  • 副本集通常包含多个应可互换的节点;如果它们每个都在启动时尝试初始化副本集,则会抛出错误
  • 重新启动服务是正常的,预期的行为;例如,当您升级到下一个版本的MongoDB时,或者在重新启动服务器主机的修补程序之后,或者在断电之后
  • 如果您的脚本在每次启动MongoDB服务时尝试初始化已初始化的副本集,则会引发错误

我强烈建议您进行三处更改:

  1. 让您的mongo容器仅运行mongo,而无需执行初始化和监视副本集的步骤。
  2. 如果要运行副本集,请以受控的手动方式仔细启动它。同上(如果要添加/删除节点或重新配置)。
  3. 如果要监视副本集的运行状况,请使用单独的工具执行此操作。让mongo服务部门完成其日常工作。

以上是 无法使用docker-compose运行具有副本集的mongo容器 的全部内容, 来源链接: utcz.com/qa/405717.html

回到顶部