overlay2存储驱动程序中的"native overlay diff"是什么意思?

Sun*_*oon 5 docker

我经历过,移除了与正在运行的容器相关联的图像的下层(差异).(因此删除了容器中的某些文件)

我认为Docker信息中的"Native Overlay Diff"选项非常可疑.

我的码头信息如下:

$ docker info
...
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: false
...
Run Code Online (Sandbox Code Playgroud)

你们知道'Native Overlay Diff'的确切含义吗?

kbo*_*ino 6

这似乎与内核选项有关,在KconfigOVERLAY_FS_REDIRECT_DIR中描述为:

config OVERLAY_FS_REDIRECT_DIR
bool "Overlayfs: 默认开启重定向目录功能"
取决于 OVERLAY_FS
帮助

如果启用此配置选项,则默认情况下重命名目录时覆盖文件系统将使用重定向。在这种情况下,仍然可以使用“redirect_dir=off”模块选项全局关闭重定向,或者使用“redirect_dir=off”挂载选项在文件系统实例上关闭重定向。

请注意,重定向不向后兼容。也就是说,在不支持此功能的内核上安装具有重定向功能的覆盖层将会产生意外结果。

如果不确定,请选 N。

关于 moby 问题3434234320的一些讨论表明,如果以下所有条件均为真:

  1. 内核选项OVERLAY_FS_REDIRECT_DIR已启用
  2. 存储引擎是overlay2(大多数情况下是默认的)
  3. docker 将映像存储在未安装的文件系统上redirect_dir=off
  4. 使用“本机”差异驱动程序
  5. 非空目录被重命名为 docker 构建的一部分,例如在 Dockerfile 中,如下所示:

    FROM busybox
    
    RUN mkdir /dir1
    RUN touch /dir1/newfile
    RUN mv /dir1 /dir2
    
    Run Code Online (Sandbox Code Playgroud)

然后,生成的映像将无法正确记录重命名目录的内容(即 dir2 将不包含 newfile),因为目录重命名是使用扩展文件属性 (xattr) 实现的重定向,而 docker 归档过程无法理解该属性。为了解决这个问题,当满足上述前三个条件时,docker 将使用“naive”diff 驱动程序,它可以生成正确的图像,但比“native”diff 驱动程序慢。

忽略警告似乎是安全的,但如果您发现构建速度缓慢,那么您可以尝试使用/var/lib/docker选项重新安装卷redirect_dir=off

  • 重新安装 `/var/lib/docker` 不起作用。您必须为覆盖模块使用 `redirect_dir=off` 模块选项: `modprobe -r overlay && modprobe Overlay redirect_dir=off && systemctl restart docker` (2认同)
  • 您无法在使用模块时重新加载模块。我以这种方式设置启动时的模块参数: `echo 'options overlay redirect_dir=off' > /etc/modprobe.d/disable_overlay_redirect_dir.conf` (2认同)
  • @DavidCardoso 在最近的内核中 `redirect_dir=off` 是不够的。结果是,当元复制打开时,内核> = 4.20 启用redirect_dir。您需要将 metacopy=off redirect_dir=off 设置为模块参数。请参阅https://github.com/torvalds/linux/commit/d47748e5ae5af6572e520cc9767bbe70c22ea498#diff-315c61b86e39b9b47f4ab0cd9efc2467 (2认同)