答案1
可以在overlayfs 的挂载点内创建绑定挂载。我只能使用 C 代码来完成此操作,因为 mount(8) 命令不提供此选项。
<fd> = openat(AT_FDCWD, <merge-dir>, O_RDONLY|O_CLOEXEC|O_PATH)
mount(<source-dir>, "/proc/self/fd/<fd>", "", MS_BIND|MS_REC, NULL)
close(<fd>)
<合并目录>是相对于主机系统要安装的目录,最低/下在你的情况下
<源目录>是要挂载的目录,<根目录>在你的情况下。它也与主机系统相关。
<FD>是openat返回的文件描述符int,需要与/proc/self/fd/字符串连接。
此过程可以在挂载 Overlayfs 后立即完成,也可以在安装后的任何时间完成。
我通过查看“docker run”的系统调用发现了这一点,当使用选项 --mount type=bind 执行时,似乎完全按照您在图表中描述的那样进行。由于覆盖挂载并不隐式包含子挂载(即使使用 MS_REC),打开(2)可用于打开与要挂载的目录相对应的文件描述符。 /proc/self/fd/ 中的文件描述符设备文件可以用作绑定安装的目标,该目标在描述符关闭后将保持打开状态。