ppc64le架构Rocky Linux下Podman拉取gitlab-runner helper镜像失败
问题概述
在ppc64le架构的Rocky Linux 9.2环境中,使用Podman作为容器运行时的自托管GitLab Runner,通过Web界面启动作业时拉取registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:ppc64le-d240d5bb镜像失败,报错核心为用户命名空间UID/GID不足,处理/etc/shadow时出现lchown无效参数错误。本地手动拉取并运行该镜像正常,已尝试修改config.toml、添加subuid/subgid但未解决。
解决方案
1. 确认subuid/subgid配置有效性
- 检查gitlab-runner用户的子UID/GID条目:
cat /etc/subuid /etc/subgid | grep gitlab-runner - 若输出为空或范围过小,执行以下命令添加足够的UID/GID范围(示例为100000-165535,共65536个ID):
usermod --add-subuids 100000-165535 --add-subgids 100000-165535 gitlab-runner - 执行Podman迁移并重启服务:
podman system migrate systemctl restart gitlab-runner
2. 调整GitLab Runner的Podman执行器配置
修改GitLab Runner的config.toml文件(通常路径为/etc/gitlab-runner/config.toml),确保Podman执行器正确配置用户命名空间:
[[runners]] name = "ppc64le-rocky9-runner" url = "https://你的GitLab实例地址/" token = "你的Runner令牌" executor = "podman" [runners.podman] privileged = false pull_policy = "always" # 自动分配用户命名空间,避免UID/GID冲突 userns_mode = "auto" # 若auto模式无效,可尝试指定映射范围 # uid_mappings = [{"container" = 0, "host" = 100000, "size" = 65536}] # gid_mappings = [{"container" = 0, "host" = 100000, "size" = 65536}]
修改后重启GitLab Runner服务:
systemctl restart gitlab-runner
3. 配置Podman用户命名空间映射
为gitlab-runner用户创建Podman配置文件,强制使用指定的UID/GID映射:
- 创建配置文件目录(若不存在):
mkdir -p ~gitlab-runner/.config/containers - 编辑
~gitlab-runner/.config/containers/containers.conf:[containers] userns_size = 65536 [engine] userns-remap = "gitlab-runner:gitlab-runner" - 执行迁移并重启服务:
podman system migrate systemctl restart gitlab-runner
4. 检查SELinux限制
Rocky Linux 9默认启用SELinux,可能阻止Podman的权限操作:
- 临时关闭SELinux测试:
重新触发作业,若恢复正常,添加SELinux允许规则:setenforce 0ausearch -c 'podman' --raw | audit2allow -M my-podman semodule -i my-podman.pp setenforce 1
5. 匹配GitLab Runner与Helper镜像版本
报错中的Helper镜像标签d240d5bb对应GitLab Runner 16.0.2版本,检查本地Runner版本:
gitlab-runner --version
若版本不匹配,升级或降级GitLab Runner至对应版本,确保与Helper镜像兼容性。
6. 测试特权模式(仅用于排查)
若以上方案无效,可临时启用特权模式排查是否为权限限制问题(注意安全风险,生产环境谨慎使用):
在config.toml的[runners.podman]段添加:
privileged = true
重启服务后重新触发作业。
内容的提问来源于stack exchange,提问作者user3602479

