无法使用 docker-compose 运行带有副本集的 mongo 容器 [英] Unable to run mongo container with replica set using docker-compose

查看:33
本文介绍了无法使用 docker-compose 运行带有副本集的 mongo 容器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的 docker-compose 文件:

Here's my docker-compose file:

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

Here's my 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 退出.

The issue I am facing is : The mongo container is executing all its steps successfully but its exiting with status 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

推荐答案

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

Your startup script should not initialise or monitor the replicaset; those should be manual tasks.

您应该记住:

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

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

I strongly recommend that you make three changes:

  1. 让您的 mongo 容器只运行 mongo,无需启动和监控副本集的步骤.
  2. 如果您想运行副本集,请小心并以受控的手动方式启动它;如果要添加/删除节点或重新配置,同上.
  3. 如果您想监控副本集的健康状况,请使用单独的工具来执行此操作;让 mongo 服务完成它的日常工作.

这篇关于无法使用 docker-compose 运行带有副本集的 mongo 容器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆