Docker在安装卷时的行为

我目前正试图了解Docker如何处理卷的安装,并遇到下面的行为,似乎对我来说是一种风格:

假设我们想将/ var / run目录挂载到一个容器中(就像一个例子),我们执行以下操作:

$ docker run -i -t -v /var/run:/test ubuntu:latest /bin/bash 

到目前为止,一切工作正常,所有位于/ var / run下的文件夹和文件显示在/ test中的容器内。

现在看看如果我们决定挂载/ var目录会发生什么:

 $ docker run -i -t -v /var:/test ubuntu:latest /bin/bash 

不过,/ var中的所有主机文件夹都显示在/ test中。 但是,在进入/testing/运行之后,主机上的文件和目录不会显示。 换句话说,Docker似乎并没有对后续子目录及其内容进行“recursion”安装。 这是普通的Docker行为吗?

这不仅仅是普通的Docker行为; 这是普通的Linux行为。 当你绑定一个文件系统到另一个目录,如下所示:

 mkdir /tmp/mount mount -o bind /var /tmp/mount 

您将只能看到源文件系统中存在的目标装载中的文件 。 除非要显式绑定这些目录,否则不会看到任何子安装中包含的文件:

 mount -o bind /var/run /tmp/mount/run 

这正是您在Docker中看到的行为,因为这与Docker用于公开容器内的主机目录的机制完全相同。