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

时间:2014-06-22 16:40:50

标签: docker

仅使用典型数据Docker容器:

FROM stackbrew/busybox:latest

RUN mkdir /data
VOLUME /data

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

docker run -name my-data data true

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

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

1 个答案:

答案 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>

相关问题