Gitlab CI拉取nginx:latest失败,schema版本不兼容等问题求助
解决方案
1. 升级Buildah/Podman版本
旧版本的buildah/podman对OCI镜像schema v2的支持存在缺陷,直接升级到最新稳定版:
- 以RHEL/CentOS为例执行升级:
dnf update buildah podman -y - 验证版本是否更新成功:
buildah --version podman --version
2. 调整Buildah构建格式
去掉构建命令里的--format docker参数,改用默认的OCI格式(或显式指定):
buildah bud -t <你的镜像标签> . # 或者显式指定OCI格式 buildah bud --format oci -t <你的镜像标签> .
新版Gitlab对OCI标准的适配性更好,放弃Docker格式指定后能规避schema版本兼容问题。
3. 修正镜像仓库优先级配置
编辑容器工具的仓库配置文件,避免优先尝试本地仓库:
- 修改
/etc/containers/registries.conf,添加或确保以下内容:[[registry]] prefix = "docker.io/library" location = "docker.io/library" - 重启podman服务生效:
systemctl restart podman
4. 直接指定镜像的Digest哈希
如果升级工具后仍有问题,在Dockerfile里用哈希指定兼容的镜像版本:
FROM docker.io/library/nginx:latest@sha256:<你获取到的manifest哈希值>
哈希值可以在能正常拉取镜像的环境里执行podman inspect nginx:latest,从Digest字段复制。
5. 调整Gitlab Runner的容器运行时
确保Runner使用最新的容器运行时:
- 编辑
/etc/gitlab-runner/config.toml,修改[runners.docker]下的runtime设置:[runners.docker] runtime = "crun" - 重启Gitlab Runner服务:
gitlab-runner restart
内容的提问来源于stack exchange,提问作者OhJohnny
相关产品推荐
相关产品推荐

