即使Docker容器卷未运行,它们如何工作?

只需要一个典型的数据Docker容器:

FROM stackbrew/busybox:latest RUN mkdir /data VOLUME /data 

现在我看到了很多这样运行的:

docker run -name my-data data true

true命令一运行就退出,容器也一样。 但令人惊讶的是,当你通过--volumes-from my-data连接到另一个容器时,它将继续提供音量。

我的问题是,这是如何工作的? 如何停止容器仍然允许访问它的卷?

docker中的卷不是顶层的东西。 它们“简单地”是容器元数据的一部分。

当你在dockerfile中有VOLUME或者用-v启动一个容器时,Docker会在/var/lib/docker/volumes *中创build一个包含随机ID的目录(这与使用commit创build一个图像的过程完全相同空),并将该随机ID添加到容器的元数据。

当容器启动时,Docker将在该/var/lib/docker/volumes/的给定位置挂载 – 绑定/var/lib/docker/volumes/ *目录。

当你使用volume volumes-from ,Docker将只查找卷ID和其他容器的位置,运行或不运行,并在设置的位置挂载 – 绑定目录。

卷不与运行时链接,只是挂载的目录。

*使用较新的版本,Docker现在使用vfs驱动进行存储,而/var/lib/docker/volumes/仅用于元数据,如大小,创build时间等。实际数据存储在/var/lib/docker/vfs/dir/<volume id>