gpt4 book ai didi

docker - docker共享卷无法按文档中所述运行

转载 作者:行者123 更新时间:2023-12-02 18:17:20 30 4
gpt4 key购买 nike

我现在正在学习docker,根据文档说明,当使用-v标志删除包含共享卷链接的最后一个容器时,共享数据卷应仅被销毁。但是,在我的初始测试中,这不是我看到的行为。

从文档中:
Managing Data in Containers

If you remove containers that mount volumes, including the initial dbdata container, or the subsequent containers db1 and db2, the volumes will not be deleted. To delete the volume from disk, you must explicitly call docker rm -v against the last container with a reference to the volume. This allows you to upgrade, or effectively migrate data volumes between containers.



我做了以下事情:
  • docker run -d -v / dbdata --name dbdata ubuntu:14.04 echo postgres的仅数据容器
  • docker run -d --volumes-from dbdata --name db1 ubuntu:14.04 / bin / bash
  • 在/ dbdata目录
  • 上创建了一些文件
  • 退出db1容器
  • docker run -d --volumes-from dbdata --name db2 ubuntu:14.04 / bin / bash
  • 我可以访问在项目3上创建的文件并创建一些新文件
  • 退出db2容器
  • docker run -d --volumes-from dbdata --name db3 ubuntu:14.04 / bin / bash
  • 我可以访问在项目3和6上创建的文件,并创建一些新文件
  • 退出db3容器
  • 删除了没有-v标志
  • 的所有容器
  • 再次创建了db容器,但是数据不存在。

  • 如用户手册中所述:

    This allows you to upgrade, or effectively migrate data volumes between containers.



    我想知道我在做什么错。

    最佳答案

    你什么都没做错。在步骤12中,您将创建一个具有相同名称的容器。它具有不同的体积,最初是空的。

    也许以下示例可以说明正在发生的事情(ID和路径将/可能在您的系统或其他Docker版本上有所不同):

    $ docker run -d -v /dbdata --name dbdata ubuntu:14.04 echo Data-only container for postgres
    7c23cc1e6637e29f36c6cdd4c1461f6e1742b201e05227279ac3db55328da674

    运行具有卷/ dbdata的容器,并将其命名为dbdata。返回ID(您的ID将有所不同)。

    现在,让我们检查容器并打印“体积”信息:
    $ docker inspect --format "{{ .Volumes }}" dbdata
    map[/dbdata:/var/lib/docker/vfs/dir/248641a5f51a80b5004f72f622a7329835e93881e9915a01b3c7112189d0b55e]

    我们可以看到您的/ dbdata卷位于/ var / lib / docker / vfs / dir / 248641 ...

    让我们在容器的卷内创建一些新数据:
    $ docker run --rm --volumes-from dbdata ubuntu:14.04 /bin/bash -c "echo fuu >> /dbdata/test"

    并检查是否可用
    $ docker run --rm --volumes-from dbdata -it ubuntu:14.04 cat /dbdata/test
    fuu

    之后,删除不带-v标志的容器。
    $ docker rm dbdata

    dbdata容器(标识为7c23cc1e6637)已消失,但是仍在文件系统上,因为您可以查看是否检查了该文件夹:
    $ cat /var/lib/docker/vfs/dir/248641a5f51a80b5004f72f622a7329835e93881e9915a01b3c7112189d0b55e/test
    fuu

    (请注意:如果您使用 -v 标志并使用 docker rm -v dbdata删除容器,则主机文件系统上的卷文件 将被删除,并且上述 cat命令将导致没有此类文件或目录消息或类似内容)

    最后,在步骤12中,启动一个 新的容器,并使用另一个 不同的卷,并为其赋予相同的名称:dbdata。
    docker run -d -v /dbdata --name dbdata ubuntu:14.04 echo Data-only container for postgres
    2500731848fd6f2093243da3be064db79e76d731904e6f5349c3f00f054e5f8c

    检查会产生不同的体积,最初是空的。
    docker inspect --format "{{ .Volumes }}" dbdata
    map[/dbdata:/var/lib/docker/vfs/dir/faffba00358060024026412203a1562125f73d2bdd69a2202483e858dda04740]

    如果要重新使用该卷,则必须创建一个新容器和 import/restore the data from the filesystem into the data container。在这种情况下,您不应首先删除数据容器,因为您想从中重复使用该卷。

    关于docker - docker共享卷无法按文档中所述运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945198/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com