【问题标题】:Stop VM with MongoDB docker image without losing data使用 MongoDB docker 映像停止 VM 而不会丢失数据
【发布时间】:2017-06-30 13:19:32
【问题描述】:

我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 镜像,并且数据库中已经有数据。如果我停止 VM(以节省一夜之间的费用),我会丢失数据库中包含的所有数据吗?我怎样才能让它在这些情况下持久化?

【问题讨论】:

    标签: linux mongodb docker amazon-ec2


    【解决方案1】:

    有多种方法可以实现这一点,但最常见的两种方法是:

    • 在你的主机上创建一个目录来挂载数据
    • 创建一个泊坞窗 挂载数据的卷

    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 卷。

    $ docker volume create my-volume
    

    这将在文件夹 /var/lib/docker/volumes/my-volume 中创建一个 docker 卷。现在您可以使用以下命令启动容器:

    docker run --name some-mongo -v my-volume:/data/db -d mongo:tag
    

    所有数据都将存储在my-volume 中,因此在文件夹/var/lib/docker/my-volume 中。因此,即使您删除容器并创建与此卷链接的新 mongo 容器,您的数据也会被加载到新容器中。

    您还可以在执行初始docker run 命令时使用--restart=always 选项。这意味着您的容器将在您的 VM 重新启动后自动重新启动。如果您也保留了数据,那么您的数据库在重新启动之前或之后将没有区别。

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2016-01-18
      • 2023-03-18
      相关资源
      最近更新 更多