码头集装箱内的重叠



是否可以在(特权(docker容器内安装覆盖fs?至少我的直觉方法在容器外运行良好,但失败了:

> mkdir /tmp/{up,low,work,merged}
> mount -t overlay overlay -o lowerdir=/tmp/low/,upperdir=/tmp/up/,workdir=/tmp/work/ /tmp/merged/
mount: /tmp/merged: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.

附加信息:

  • Docker版本18.09.1,构建4c52b90
  • 内核4.19.0-8-amd64
  • Debian 10(主机和docker镜像(

找到了一些有效的东西!将workdir和upperdir安装为tmpfs对我来说很有用。像这样:

> mkdir /tmp/overlay
> mkdir /tmp/{low,merged}
> mount -t tmpfs tmpfs /tmp/overlay
> mkdir /tmp/overlay/{up,work}
> mount -t overlay overlay -o lowerdir=/tmp/low/,upperdir=/tmp/overlay/up/,workdir=/tmp/overlay/work/ /tmp/merged/ 

我仍然有兴趣解释为什么在docker容器中创建一个不带tmpfs的覆盖失败?

如何在docker容器内装载覆盖层:

https://gist.github.com/detunized/7c8fc4c37b49c5475e68ef9574587eee

基本上,您需要使用--privileged或更安全的--cap-add=SYS_ADMIN来运行容器。

这是一个猜测,但我怀疑这是因为docker已经在使用overlayfs,而overlayfs拒绝使用upperdir作为另一个overlayfs。

我怀疑这可能是由于白化文件:

为了支持rm和rmdir而不更改下文件系统,覆盖文件系统需要记录在文件已删除的文件系统。这是使用白化处理完成的和不透明目录(非目录总是不透明的(。

一个白化被创建为设备号为0/0的字符设备。当在合并目录的上层发现白化时较低级别中的匹配名称将被忽略,并且白化本身也是隐藏的。

要删除下层中存在的文件,overlayfs将创建一个白化文件并隐藏所有白化文件(设备编号0,0(。从逻辑上讲,这意味着您不能在overlayfs内创建编号为0,0的字符设备文件,因为必须由overlayfs本身隐藏。

如果允许使用overlayfs作为upperdir,它将无法创建封锁文件,因此也无法从较低层中rmrmdir任何文件。因为它无法在另一个覆盖层上创建编号为0,0的字符设备文件。

相关内容

  • 没有找到相关文章

最新更新