Docker容器卷如何运行,即使它们没有运行?

Meh*_*hdi 15 docker

仅采用典型数据Docker容器:

FROM stackbrew/busybox:latest

RUN mkdir /data
VOLUME /data
Run Code Online (Sandbox Code Playgroud)

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

docker run -name my-data data true

true命令在运行后立即退出,容器也是如此.但令人惊讶的是,当您将其与另一个容器连接时,它会继续为该卷提供服务--volumes-from my-data.

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

cre*_*ack 35

docker中的卷不是顶级的东西.它们"简单地"是容器元数据的一部分.

当您VOLUME在dockerfile中或启动容器时-v,Docker将/var/lib/docker/volumes使用随机ID 在*中创建一个目录(这与创建图像的过程完全相同,commit除非它是空的)并将该随机ID添加到容器的元数据中.

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

当您使用时volumes-from,Docker将只查找其他容器中的卷id和位置,运行与否,并在目标位置挂载绑定目录.

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

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