podman 返回“处理 tar 文件时出错(退出状态 1):不支持操作”(无根)

Cav*_*ade 7 podman

启动镜像 alpine 和 ubuntu 时,podman 可以工作(RHEL 8)。如果启动图像 ubi8 和 grafana/grafana-oss,则会失败并显示

Error: writing blob: adding layer with blob "sha256:de63ba066b7c0c23e2434efebcda7800d50d60f33803af9c500f75a69fb76ffa": Error processing tar file(exit status 1): operation not supported
Run Code Online (Sandbox Code Playgroud)

为什么有些图像失败而其他图像却失败?这是无根完成的,但网络文件系统并未发挥作用。完整输出:

$ whoami
foo
$ echo $HOME
/home/foo
$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
rootfs          7.9G  6.8G  1.2G  86% /
$ podman run -it ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/001-rhel-shortnames.conf)
Trying to pull registry.access.redhat.com/ubi8:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 1b890c73c3cf skipped: already exists  
Copying blob de63ba066b7c done  
Error: writing blob: adding layer with blob "sha256:de63ba066b7c0c23e2434efebcda7800d50d60f33803af9c500f75a69fb76ffa": Error processing tar file(exit status 1): operation not supported
Run Code Online (Sandbox Code Playgroud)

它看起来与尝试在 NFS v3 上存储数据时给出的错误类似,但不是。($HOME 是本地文件系统。)主机系统是在 VMware VM 内存中运行的操作系统映像。操作系统是RHEL8.6。内核=4.18.0。

Cav*_*ade 4

简短回答:主机文件系统类型是 tmpfs(又名 rootfs),它与用作容器的暂存区域并不完全兼容。添加--storage-opt "overlay.mount_program=/usr/bin/fuse-overlayfs"可以解决这个问题。

完整答案:这不起作用,因为 tmpfs (rootfs) 被用作主机系统的根文件系统。它被用来存储容器的后备存储,又名临时区域(配置文件变量:graphroot),即存储图像、容器本地文件系统等。当运行图像来创建容器时,图像的文件系统和正在运行的容器的文件系统被合并到覆盖文件系统中。镜像的文件系统在overlayfs中充当“下层目录”,容器的文件系统充当“上层目录”。Tmpfs(以及 rootfs)不允许所有必需的 xattrs(user.* 和 trust.*)充当上层目录。具体来说,由于 xattr 问题,无法在上层文件系统上创建不透明目录。某些镜像(例如 ubi8 和 grafana-oss)会使用预先存在的不透明目录启动,因此这些镜像根本无法运行,也无法拉取它们的镜像。其他镜像如 alpine 和 ubuntu 则没有此限制。但是,一旦启动,这些容器就会由于 xattr 问题而无法安装软件。最好使用 XFS 文件系统上的后备存储来运行所有这些容器。但是,可以使用 --storage-opt "overlay.mount_program=/usr/bin/fuse-overlayfs"fusion-overlayfs 驱动程序在 tmpfs 上运行它们,因为数据在进出内核的过程中必须经过 FUSE 层,因此 I/O 速度会变慢。如果容器的本地文件系统的性能不是问题,那么在我看来,这将是一个可以接受的解决方法。可以通过在主机系统上创建 XFS 文件系统并将后备存储指向该目录(例如通过设置 XDG_DATA_HOME)来解决此问题。或者,这可以通过在主机系统的 tmpfs 上创建一个包含 XFS 文件系统的文件并安装该文件来完成。顺便说一句,NFS v3也有类似的问题。Redhat 已更新 podman 以允许使用 NFS v4 作为后备存储。