docker 在overlay2存储驱动中`native overlay diff`是什么意思?

omvjsjqw  于 2023-05-22  发布在  Docker
关注(0)|答案(2)|浏览(256)

我经历了与运行容器相关联的图像的较低层(diff)被删除。(因此容器中的一些文件被删除)
我认为Docker信息中的“Native Overlay Diff”选项非常可疑。
我的docker信息如下:

$ docker info
...
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: false
...

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

a9wyjsp7

a9wyjsp71#

这似乎与OVERLAY_FS_REDIRECT_DIR内核选项有关,在Kconfig中描述为:
配置OVERLAY_FS_REDIRECT_DIR
bool“Overlayfs:默认情况下打开重定向目录功能”
取决于OVERLAY_FS
帮助
如果启用了这个配置选项,那么默认情况下,覆盖文件系统在重命名目录时将使用重定向。在这种情况下,仍然可以使用“redirect_dir=off”模块选项全局关闭重定向,或者使用“redirect_dir=off”挂载选项在文件系统示例的基础上关闭重定向。
请注意,重定向不向后兼容。也就是说,在不支持此功能的内核上安装具有重定向的覆盖将产生意想不到的结果。
如果不确定,说N。
关于moby问题3434234320的一些讨论表明,如果以下所有条件都为真:
1.启用了OVERLAY_FS_REDIRECT_DIR内核选项
1.存储引擎为overlay2(大多数情况下为默认值)

  1. docker在未使用redirect_dir=off挂载的文件系统上存储镜像
    1.使用“本机”diff驱动程序
    1.将非空目录重命名为docker构建的一部分,例如在Dockerfile中,如下所示:
FROM busybox

RUN mkdir /dir1
RUN touch /dir1/newfile
RUN mv /dir1 /dir2

然后,所得到的镜像将无法正确记录重命名目录的内容(即,dir2将不包含newfile),因为目录重命名被实现为使用扩展文件属性(xattr)的重定向,这是docker归档过程无法理解的。为了解决这个问题,当满足上面的前三个条件时,docker将使用“naive”diff驱动程序,该驱动程序生成正确的图像,但比“native”diff驱动程序慢。
忽略警告似乎是安全的,但是如果您注意到构建速度缓慢,那么您可以尝试使用redirect_dir=off选项重新挂载为/var/lib/docker服务的卷。

mum43rcc

mum43rcc2#

临时修复

echo 0 > /sys/module/overlay/parameters/redirect_dir

然后重启Docker

systemctl restart docker

显示docker信息

docker info
...
  Native Overlay Diff: true
...

使用此cmd启用本机覆盖差异

相关问题