使用MongoDB docker镜像停止VM而不会丢失数据

时间:2017-02-12 14:56:20

标签: linux mongodb docker amazon-ec2

我已在AWS EC2上的VM中安装了官方MongoDB docker镜像,并且数据库上已有数据。如果我停止VM(为了节省一夜之间的费用),我会丢失数据库中包含的所有数据吗?如何在这些场景中保持持久性?

1 个答案:

答案 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后自动重启。当您持久保存数据时,重新启动之前或之后数据库之间也没有区别。