我目前正在尝试了解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行为吗?
这不仅仅是普通的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用于公开容器内的主机目录的机制完全相同.
归档时间: |
|
查看次数: |
1261 次 |
最近记录: |