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

从文档中:
Managing Data in 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容器,但是数据不存在。

  • 如用户手册中所述:



    我想知道我在做什么错。

    最佳答案

    你什么都没做错。在步骤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/

    10-16 03:00