当前状态
- 我有一个没有复制集标志的服务器上运行的 MongoDB 实例 (
--replSet
( - 我在数据库中有一些以前存储的信息,并希望保留这些信息
目的
- 但是,我希望使用为守护程序设置的
--replSet "my-set"
标志重新启动容器并保持先前的信息不变
实现
我正在尝试按照教程进行操作,以使用 Docker 在 MongoDB 中设置副本集,并在本地机器上试用。
-
创建一个标准的MongoDB Docker容器,不带代表当前状态的标志
replSet
集:docker run -d --name mongo_rs --publish 37017:27017 mongo
-
使用MongoDB Compass,我连接到数据库,并将一些虚拟信息添加到名为
test
的数据库和名为players
的集合中 -
我停止容器:
docker container stop mongo_rs
从这里开始,我希望将--replSet "my-set"
添加到mongo_rs
容器中,并通过mongo
Shell配置副本集,如教程中所述。实现它的可能解决方案是什么?
这是我的 .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