Docker在装载卷时的行为

时间:2016-08-09 15:15:50

标签: docker containers

我目前正在尝试了解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中。但是,在cd into / test / run之后,不会显示来自主机的文件和目录。换句话说,Docker似乎没有对后续子目录及其内容进行“递归”安装。这是普通的Docker行为吗?

1 个答案:

答案 0 :(得分:6)

这不仅仅是普通的Docker行为;这是普通的 linux 行为。将文件系统绑定到另一个目录时,如:

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

您只会在源文件系统中看到目标装载中存在的文件。您不会看到任何子挂载中包含的文件,除非您明确绑定挂载这些目录:

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

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