10.19. 容器
带有 fuse-overlayfs 的无根容器无法识别删除的文件
在 RHEL 8.4 及更早版本中,rootless 镜像和容器是使用 fuse-overlayfs 文件系统创建或存储的。在 RHEL 8.5 及之后的版本中使用此类镜像和容器,对使用内核提供的 overlayfs 实现的非特权用户,以及已删除了 RHEL 8.4 中容器或镜像中文件或目录的用户引入了问题。这个问题不适用于 root 帐户创建的容器。
例如,在使用 fuse-overlayfs 文件系统时,从容器或镜像中删除的文件或目录被标记为使用 whiteout 格式的文件或目录。但是,由于格式的不同,内核 overlayfs 实现无法识别 fuse-overlayfs 创建的 whiteout 格式。因此,任何删除的文件或目录仍会出现。这个问题不适用于 root 帐户创建的容器。
要临时解决这个问题,请使用以下选项之一:
-
使用
podman unshare rm -rf $HOME/.local/share/containers/*
命令删除所有非特权用户的容器和镜像。当用户下次运行 Podman 时,会重新创建$HOME/.local/share/containers
目录,用户需要重新创建其容器。 -
继续以无根用户身份运行
podman
命令。第一次在系统上调用podman
的更新版本,它会扫描$HOME/.local/share/containers
目录中的所有文件,并检测是否使用 fuse-overlayfs。Podman 记录扫描结果,以便以后它不会重新运行扫描。因此,不会出现删除的文件。
检测 fuse-overlayfs 仍需要的时间取决于需要扫描的容器和镜像中的文件和目录数量。
(JIRA:RHELPLAN-92741)
在较旧的容器镜像中运行 systemd 无法正常工作
在较旧的容器镜像(如 centos:7
)中运行 systemd 将无法正常工作:
$ podman run --rm -ti centos:7 /usr/lib/systemd/systemd Storing signatures Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted [!!!!!!] Failed to mount API filesystems, freezing.
要临时解决这个问题,请使用以下命令:
# mkdir /sys/fs/cgroup/systemd # mount none -t cgroup -o none,name=systemd /sys/fs/cgroup/systemd # podman run --runtime /usr/bin/crun --annotation=run.oci.systemd.force_cgroup_v1=/sys/fs/cgroup --rm -ti centos:7 /usr/lib/systemd/systemd
(JIRA:RHELPLAN-96940)
使用 Beta GPG 密钥签名的容器镜像无法拉取
目前,当尝试拉取 RHEL Beta 容器镜像时,podman
会退出并显示错误消息:Error:Source image rejected:None of the signatures were accepted
。镜像因为当前构建被配置为不信任 RHEL Beta GPG 密钥而无法拉取。
作为临时解决方案,请确保红帽 Beta GPG 密钥保存在您的本地系统中,并使用针对适当的 beta 命名空间更新 podman image trust set
命令的现有信任范围。
如果您没有本地存储 Beta GPG 密钥,您可以通过运行以下命令来拉取它:
sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta https://www.redhat.com/security/data/f21541eb.txt
要将 Beta GPG 密钥作为信任添加到命名空间中,请使用以下命令之一:
$ sudo podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta registry.access.redhat.com/namespace
和
$ sudo podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta registry.redhat.io/namespace
将 namespace 替换为 ubi9-beta 或 rhel9-beta。