如何使用守护进程的新标志重新启动现有MongoDB Docker容器 现状 我有一个MongoDB实例在没有复制集标志(--replSet)的服务器上运行 我以前在数据库中存储了一些信息,希望保留这些信息 目标 但是,我希望使用为守护进程设置的--replSet“my set”标志重新启动容器,并保持以前的信息完整 实施

如何使用守护进程的新标志重新启动现有MongoDB Docker容器 现状 我有一个MongoDB实例在没有复制集标志(--replSet)的服务器上运行 我以前在数据库中存储了一些信息,希望保留这些信息 目标 但是,我希望使用为守护进程设置的--replSet“my set”标志重新启动容器,并保持以前的信息完整 实施,mongodb,docker,Mongodb,Docker,我正试着跟随一个程序,并在我本地的机器上进行测试 创建一个标准MongoDB Docker容器,其中不包含表示当前状态的标志replSetset: docker run -d --name mongo_rs --publish 37017:27017 mongo 我使用MongoDB指南针连接到DB,并向名为test的数据库和名为players的集合添加了一些虚拟信息 我停下集装箱: docker container stop mongo_rs docker cp docker-entry

我正试着跟随一个程序,并在我本地的机器上进行测试

  • 创建一个标准MongoDB Docker容器,其中不包含表示当前状态的标志
    replSet
    set:

    docker run -d --name mongo_rs --publish 37017:27017 mongo
    
  • 我使用MongoDB指南针连接到DB,并向名为
    test
    的数据库和名为
    players
    的集合添加了一些虚拟信息

  • 我停下集装箱:

    docker container stop mongo_rs
    
    docker cp docker-entrypoint.sh mongo_rs:/usr/local/bin/docker-entrypoint.sh
    
    docker start mongo_rs
    
  • 从这里开始,我希望将
    --replSet“my set”
    添加到
    mongo\u rs
    容器中,并通过
    mongo
    Shell配置副本集,如本教程所述。实现这一目标的可能解决方案是什么?

    这里有一个解决方法:

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

    docker cp mongo_rs:/usr/local/bin/docker-entrypoint.sh .
    
    2-编辑脚本,将行(最后一行)
    exec“$@”
    更改为:

    mongod --replSet my-mongo-set --port 27017
    
    3-将脚本重新复制到容器中:

    docker container stop mongo_rs
    
    docker cp docker-entrypoint.sh mongo_rs:/usr/local/bin/docker-entrypoint.sh
    
    docker start mongo_rs
    
    4-启动您的容器:

    docker container stop mongo_rs
    
    docker cp docker-entrypoint.sh mongo_rs:/usr/local/bin/docker-entrypoint.sh
    
    docker start mongo_rs
    
    这是我的.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 
    

    卷部分具有与根不同的绝对路径。实际上docker文件在根目录上创建了一个自配置文件,因此,如果您将根目录作为docker compose安装位置,请将其更改为其他位置,此时配置文件设置将永远不会在docker install up/down上删除。

    不幸的是,无法更新容器的
    CMD
    。您只能更新此处提到的内容:。备份数据库并使用所需的标志启动一个新容器。还要检查以下内容:。“黑客”解决方案是转到容器的配置,比如
    /var/lib/docker/containers//config.json
    ,修改它,然后重新启动docker守护程序。@tgogos我正在研究它。如果把它写在
    docker-compose
    文件中,这个东西会很容易吗?我看不出
    docker-compose
    在这种情况下有什么帮助。我会
    docker exec-it mongo\u rs bash
    进入mongo容器,然后使用
    mongoexport
    将数据库保存到文件中。您可以使用
    docker cp…
    将此文件复制到主机,然后我将启动一个新的mongo容器,并尝试使用
    mongoimport
    从头开始创建db。