仅使用典型数据Docker容器:
FROM stackbrew/busybox:latest
RUN mkdir /data
VOLUME /data
现在我看到很多像这样运行的人:
docker run -name my-data data true
true
命令在运行后立即退出,容器也会退出。但令人惊讶的是,当您通过--volumes-from my-data
将其与另一个容器连接时,它会继续为该卷提供服务。
我的问题是,这是如何运作的?停止的容器如何仍允许访问其卷?
答案 0 :(得分:35)
docker中的卷不是顶级的东西。他们只是"简单地"容器的元数据的一部分。
如果您的dockerfile中有VOLUME
或者使用-v
启动容器,Docker将使用随机ID在/var/lib/docker/volumes
*中创建一个目录(这与创建完全相同的过程)一个commit
的图像,除了它是空的)并将该随机ID添加到容器的元数据中。
当容器启动时,Docker将在该卷的给定位置挂载绑定目录/var/lib/docker/volumes/
*。
当您使用volumes-from
时,Docker将只查找其他容器中的卷ID和位置,运行与否,并在目标位置挂载绑定目录。
卷没有与运行时链接,它只是挂载的目录。
*对于较新版本,Docker现在使用vfs
驱动程序进行存储,/var/lib/docker/volumes/
仅用于大小,创建时间等元数据。实际数据存储在/var/lib/docker/vfs/dir/<volume id>
中