【发布时间】:2020-02-18 09:40:24
【问题描述】:
当前状态
- 我有一个 MongoDB 实例在没有 复制集 标志的服务器上运行 (
--replSet) - 我有一些以前存储在数据库中的信息并希望保留这些信息
目标
- 不过,我希望使用为守护进程设置的
--replSet "my-set"标志重新启动容器,并保持之前的信息不变
实施
我正在尝试跟随 tutorial for setting replica sets in MongoDB with Docker 并在我的本地计算机上尝试。
-
创建一个标准的 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 配置副本集。实现它的可能解决方案是什么?
【问题讨论】:
-
很遗憾,您无法更新容器的
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从头开始创建数据库。