我已在AWS EC2上的VM中安装了官方MongoDB docker镜像,并且数据库上已有数据。如果我停止VM(为了节省一夜之间的费用),我会丢失数据库中包含的所有数据吗?如何在这些场景中保持持久性?
答案 0 :(得分:5)
有多种方法可以实现这一目标,但最常见的两种方法是:
1)在主机系统的适当卷上创建数据目录,例如: /my/own/datadir
。像这样启动你的mongo容器:
$ docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo:tag
命令的-v /my/own/datadir:/data/db
部分将/my/own/datadir
目录从底层主机系统挂载到容器内/data/db
,默认情况下MongoDB将写入其数据文件。
请注意,启用了SELinux的主机系统上的用户可能会遇到此问题。当前的解决方法是将相关的SELinux策略类型分配给新数据目录,以便允许容器访问它:
$ chcon -Rt svirt_sandbox_file_t /my/own/datadir
这是official documentation of the image。
的来源2)另一种可能性是使用泊坞窗卷。
$ docker volume create my-volume
这将在文件夹/var/lib/docker/volumes/my-volume
中创建一个泊坞窗卷。现在,您可以使用以下命令启动容器:
docker run --name some-mongo -v my-volume:/data/db -d mongo:tag
所有数据都将存储在my-volume
中,因此存储在/var/lib/docker/my-volume
文件夹中。因此,即使您删除容器并创建与此卷链接的新mongo容器,您的数据也将被加载到新容器中。
执行初始--restart=always
命令时,也可以使用docker run
选项。这意味着您的容器会在重新启动VM后自动重启。当您持久保存数据时,重新启动之前或之后数据库之间也没有区别。