我现在正在学习docker,根据文档,当使用-v标志删除保存共享卷链接的最后一个容器时,应单独销毁共享数据卷。然而,在我的初步测试中,这不是我所看到的行为。
从文档中: Managing Data in Containers
如果删除装入卷的容器(包括初始dbdata容器)或后续容器db1和db2,则不会删除卷。要从磁盘中删除卷,必须使用对卷的引用对最后一个容器显式调用docker rm -v。这允许您在容器之间升级或有效地迁移数据卷。
我做了以下事情:
如用户手册中所述:
这允许您在容器之间升级或有效迁移数据卷。
我想知道我做错了什么。
答案 0 :(得分:3)
你没有做错任何事。在步骤12中,您将创建一个具有相同名称的 new 容器。它有不同的音量,最初是空的。
以下示例可能会说明正在发生的事情(系统或其他docker版本中的ID和路径可能会有所不同):
$ docker run -d -v /dbdata --name dbdata ubuntu:14.04 echo Data-only container for postgres
7c23cc1e6637e29f36c6cdd4c1461f6e1742b201e05227279ac3db55328da674
运行具有卷/ dbdata的容器,并为其指定名称 dbdata 。返回ID(您的ID将有所不同)。
现在让我们检查容器并打印“Volumes”信息:
$ 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容器(ID为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。在您的情况下,您不应该首先删除数据容器,因为您要从中重用该卷。