当前位置: 首页 > 面试题库 >

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

顾高翰
2023-03-14
问题内容

这是我的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服务部门完成其日常工作。


 类似资料:
  • 我正在尝试使用这张图片https://hub.docker.com/r/ibmcom/cloudant-developer/对于docker compose,当我使用原始指令时,它可以工作,但是当我将其转换为docker compose格式时,它无法正常工作,我看到了仪表板页面,但它是空的,似乎已损坏。 原始运行命令: 我创建的撰写文件: 谢谢你的帮助。 另外,我确实手动执行了许可协议的命令

  • 问题内容: 我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker Hub上的文档,我将文件挂载在其中,但无济于事。 我的撰写文件如下: 的内容只有1个文件: 一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。 有人可以在这里看到一些明显的问题吗

  • 致谢 本文由 DaoCloud 社区用户谭文科提供

  • 本文向大家介绍使用 docker-compose 运行 MySQL的方法,包括了使用 docker-compose 运行 MySQL的方法的使用技巧和注意事项,需要的朋友参考一下 目录结构 mysql 目录下的 data 为数据目录,mysql 的数据表、二进制日志文件就在这里。.env 文件包含了一些变量,这些变量可以在 docker-compose.yml 文件中通过 ${variable_n

  • 问题内容: 我想使用docker-compose启动服务并保持容器运行,以便我可以通过“ docker inspect”获取其IP地址。但是,容器始终在启动后立即退出。 我试图在docker-compose.yml中添加“ command:[“ sleep”,“ 60”]“和其他内容,但是每当我添加带有” command:…“的行时,我都无法调用” docker-compose up“因为我将收到

  • 我想用docker-compose启动一个服务,并保持容器运行,这样我就可以通过'dockerinspect'获得它的IP地址。但是,容器总是在启动后立即退出。 我试图在docker-compose.yml中添加“command:[”sleep“,”60“]”和其他内容,但每当我添加带有“command:...”的行时。我不能调用“docker-compose up”,因为我将得到消息“无法启动容