Docker 挂载父子目录问题

2022-07-23 12:18:34 +08:00
 shelken
例子:
volume:
- /volume1/data/a:/data/a
- /volume1/data/c:/data/a/c

我想知道,这种情况下,假如我的宿主机的 c 有一个文件 d ,那么我的 a 文件夹下会出现 c 文件夹且有 d 吗?会占用多空间吗? docker 是怎么处理这种文件关系的?拷贝?
909 次点击
所在节点    问与答
6 条回复
Nitroethane
2022-07-23 12:41:15 +08:00
会有的。docker 是利用 Linux 的 mount 机制处理这些问题的,你把宿主机目录挂载到容器中,在容器中操作的时候就是操作的宿主机目录
Nitroethane
2022-07-23 12:44:46 +08:00
docker 把宿主机目录挂载到容器中,没记错的话具体采用的是 bind mount 机制,所以不是拷贝,是对宿主机目录的引用,有点类似 c++ 中的引用
shelken
2022-07-23 12:59:55 +08:00
@Nitroethane 那如果我在宿主机的 a 目录下直接改了 d ,会修改到我 c 目录下的 d 吗?如果修改了,是怎样的一个修改?是直接改了 d ,还是通过 docker 改了 d ?
Nitroethane
2022-07-23 21:31:06 +08:00
@shelken #3 会。这种修改机制是内核实现的,和你正常修改一个文件一样。不经过 docker
Nitroethane
2022-07-23 21:32:49 +08:00
讲道理你完全可以做个实验亲自体会一下,顺便建议了解下 Linux 的联合文件系统( union filesystem )以及文件系统挂载机制( UNIX 环境高级编程或者 Unix/Linux 系统编程手册都讲得不错)。
shelken
2022-07-23 22:01:27 +08:00
@Nitroethane 嗯,十分感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/868176

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX