Docker在安装卷时的行为

pkl*_*nst 6 containers docker

我目前正在尝试了解Docker如何处理卷的安装并遇到以下行为,这似乎对我很不利:

假设我们要将/ var/run目录挂载到容器中(仅作为示例),我们执行以下操作:

$ docker run -i -t -v /var/run:/test ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常,所有驻留在/ var/run下的文件夹和文件都显示在/ test中的容器内.

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

$ docker run -i -t -v /var:/test ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

仍然,/ var中的所有主机文件夹都显示在/ test中.但是,在cd into/test/run之后,不会显示来自主机的文件和目录.换句话说,Docker似乎没有对后续子目录及其内容进行"递归"安装.这是普通的Docker行为吗?

lar*_*sks 7

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

mkdir /tmp/mount
mount -o bind /var /tmp/mount
Run Code Online (Sandbox Code Playgroud)

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

mount -o bind /var/run /tmp/mount/run
Run Code Online (Sandbox Code Playgroud)

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

  • 有没有办法明确让docker获得那些坐骑? (3认同)