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