如何使用新的守护程序标志重新启动现有的 MongoDB Docker 容器



当前状态

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

目的

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

实现

我正在尝试按照教程进行操作,以使用 Docker 在 MongoDB 中设置副本集,并在本地机器上试用。

  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容器中,并通过mongoShell配置副本集,如教程中所述。实现它的可能解决方案是什么?

这是我的 .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 文件在 root 上创建一个自配置文件,所以如果你有 root 作为 docker-compose 安装位置,请将其更改为其他地方,现在配置文件设置永远不会在 docker 安装上/下删除。

这是一个解决方法:

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

最新更新