即使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>