【问题标题】:How to restart an existing MongoDB Docker Container with a new flags to daemon如何使用新的守护进程标志重新启动现有的 MongoDB Docker 容器
【发布时间】:2020-02-18 09:40:24
【问题描述】:

当前状态

  • 我有一个 MongoDB 实例在没有 复制集 标志的服务器上运行 (--replSet)
  • 我有一些以前存储在数据库中的信息并希望保留这些信息

目标

  • 不过,我希望使用为守护进程设置的 --replSet "my-set" 标志重新启动容器,并保持之前的信息不变

实施

我正在尝试跟随 tutorial for setting replica sets in MongoDB with Docker 并在我的本地计算机上尝试。

  1. 创建一个标准的 MongoDB Docker 容器,不带标志 replSet 集,代表当前状态:

    docker run -d --name mongo_rs --publish 37017:27017 mongo
    
  2. 我使用 MongoDB Compass 连接到数据库,并将一些虚拟信息添加到名为 test 的数据库和名为 players 的集合中

  3. 我停止容器:

    docker container stop mongo_rs
    

从这里开始,我希望将--replSet "my-set" 添加到mongo_rs 容器中,并通过教程中提到的mongo Shell 配置副本集。实现它的可能解决方案是什么?

【问题讨论】:

  • 很遗憾,您无法更新容器的CMD。您只能更新此处提到的内容:docker update。备份您的数据库并使用您想要的标志启动一个新容器。
  • 还要检查这个:How to start a stopped Docker container with a different command?。一个“hackish”的解决方案是去你的容器的配置,比如/var/lib/docker/containers/<container_id>/config.json,修改它,然后重新启动docker守护进程。
  • @tgogos 我正在调查它。如果把它写在docker-compose 文件中会不会很容易?
  • 我看不出docker-compose 在这种情况下看起来有什么帮助。我会 docker exec -it mongo_rs bash 进入 mongo 容器“内部”,然后使用 mongoexport 将数据库保存到文件中。您可以使用 docker cp ... 将此文件复制到您的主机,然后我将启动一个新的 mongo 容器并尝试使用 mongoimport 从头开始​​创建数据库。

标签: mongodb docker


【解决方案1】:

这是我的 .yml 文件

version: '3.7'

services:
  node1:
    image: mongo 
    ports:
      - 30001:27017 
    volumes:
      - $HOME/mongoclusterdata/node1:/data/db 
    networks:
      - mongocluster
    command: mongod --replSet comments 
  node2:
    image: mongo
    ports:
      - 30002:27017
    volumes:
      - $HOME/mongoclusterdata/node2:/data/db
    networks:
      - mongocluster
    command: mongod --replSet comments
    depends_on :
      - node1 
  node3:
    image: mongo
    ports:
      - 30003:27017
    volumes:
      - $HOME/mongoclusterdata/node3:/data/db
    networks:
      - mongocluster
    command: mongod --replSet comments
    depends_on :
        - node2 

networks:
  mongocluster:
    driver: bridge 

卷部分的绝对路径与 root 不同。实际上 docker 文件在 root 上创建了一个自我配置文件,所以如果你有 root 作为 docker-compose 安装位置,请将其更改为其他位置,现在是配置文件docker-install up/down 上的设置永远不会删除。

【讨论】:

    【解决方案2】:

    这是一个解决方法:

    1- 将入口点脚本复制到您的主机:

    docker cp mongo_rs:/usr/local/bin/docker-entrypoint.sh .
    

    2- 编辑脚本,将行(最后一行)exec "$@" 更改为:

    mongod --replSet my-mongo-set --port 27017
    

    3- 将脚本重新复制到您的容器中:

    docker cp docker-entrypoint.sh mongo_rs:/usr/local/bin/docker-entrypoint.sh
    

    4- 启动你的容器:

    docker start mongo_rs
    

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多