【问题标题】:Docker 'data only container' being shut downDocker“仅数据容器”被关闭
【发布时间】:2016-04-05 20:14:30
【问题描述】:

我似乎无法在任何地方找到答案。大量教程指出,拥有一个仅数据容器是您在 docker 中实现持久数据的方式。然而,我不明白的是,只要数据唯一的容器存在,数据似乎就是持久的。当它关闭并重新启动时,数据就会消失。

考虑到任何系统都不会有 100% 的正常运行时间,并且我希望长期数据库的内容能够在物理系统重新启动等之后持续存在。如何正确持久化数据?

【问题讨论】:

    标签: docker containers persistent-storage


    【解决方案1】:

    大量教程指出,只有数据容器是您在 docker 中实现持久数据的方法。

    请注意,最新版本的 Docker 不再是这种情况;卷现在是“一等”公民,可以使用docker volume 命令创建/删除/等。这意味着您可以通过运行以下命令来创建持久数据卷:

    $ docker volume create --name myvolume
    

    稍后您可以像这样附加到它:

    $ docker run -v myvolume:/data ...
    

    但我不明白的是,只要数据唯一容器存在,数据似乎只是持久的。

    如果您要在问题中包含有关如何创建纯数据容器的信息,将会有所帮助。请注意,纯数据容器不是必须“运行”才能有用;它必须存在。因此,例如,我可以像这样创建一个纯数据容器:

    $ docker run -v /data --name datacontainer  busybox true
    

    当然会运行/bin/true,然后立即退出:

    $ docker ps -a
    47568a43d386        busybox                     "true"                   7 seconds ago       Exited (0) 6 seconds ago                        datacontainer
    

    但即使容器已经退出,我也可以在新容器中使用卷:

    $ docker run -it --volumes-from datacontainer busybox sh
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/mapper/tank-docker--vol
                          83844100   2398688  81445412   3% /data
    

    此机制用于在 Docker 1.10(可能是 1.9)之前获取持久卷,但由于 docker volume 命令已不再需要。

    【讨论】:

    • 只是为了给那些像我一样挣扎的人补充一下。您的仅数据容器会创建一个卷,该卷具有生成的名称(例如 4488845jgjg3)。当您下次启动容器时,它会创建另一个名称不同的卷。这两个卷都存在于主机上,但除非您通过 id 引用它们,否则您不会自动访问它们。
    • 这就是为什么你给数据容器一个名字,并使用--volumes-from访问卷(这样你就不必担心各个卷的ID)。
    猜你喜欢
    • 2019-02-12
    • 2016-01-01
    • 1970-01-01
    • 2015-06-10
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多