You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查从GitLab Registry拉取镜像时的BackOff问题?

Kubernetes镜像拉取失败排查方案求助

我刚接手一个运行中的Kubernetes集群运维工作,集群内有个Operator通过Helm Release生成Web实例。近期我用GitLab CI/CD构建了新镜像,尝试更新Deployment拉取该镜像时遇到问题:旧镜像能在所有节点正常拉取,但新镜像始终找不到。

我已经尝试过用SSH登录节点,使用GitLab令牌对应的Docker登录凭证拉取新镜像,但依旧只能拉取同Registry下的旧镜像,新镜像始终拉取不到。我检查过镜像名称拼写,之后直接用GitLab容器镜像仓库的复制按钮获取名称,问题依旧存在。

kubectl describe pod的事件日志如下:

Events:
      Type    Reason   Age                   From     Message
      ----    ------   ----                  ----     -------
      Normal  BackOff  4m8s (x290 over 73m)  kubelet  Back-off pulling image "reg.dafni.rl.ac.uk/dafni/nivs/operator/20230801:latest"

更新内容

提问后我做了以下操作:

  • 本地可以拉取该新镜像,将其重命名后推回仓库,现在集群节点能拉取这个重命名后的镜像,但原名称的镜像还是无法拉取。
  • 用container-diff工具在本地检查原镜像,虽然本地能拉取,但工具提示:
ERRO[0004] error retrieving image reg.dafni.rl.ac.uk/dafni/nivs/operator/20230801: MANIFEST_UNKNOWN: OCI manifest found, but accept header does not support OCI manifests

排查建议

结合当前现象和错误提示,重点从以下方向排查:

  • 镜像manifest格式兼容性:错误提示显示新镜像是OCI格式的manifest,但节点容器运行时(kubelet依赖的Docker/containerd等)的请求头不支持该格式。旧镜像可能是Docker V2 Schema 2格式,而新镜像被构建为纯OCI格式,导致无法识别。
    • 检查GitLab CI/CD的镜像构建配置,尝试强制构建为Docker兼容格式(比如docker build时添加--output type=docker参数,或调整buildx配置)。
    • 查看节点容器运行时版本,确认是否支持OCI manifest格式,若版本过旧,考虑升级容器运行时。
  • 镜像仓库的manifest异常:原镜像的manifest可能在仓库端存在缓存异常、同步延迟,或未正确上传。
    • 在GitLab容器仓库后台检查该镜像的manifest状态,确认是否存在多架构manifest异常,或推送不完整的情况。
    • 在节点上手动清除容器运行时的镜像缓存(比如执行docker system prune -a或crictl rmi --prune),再尝试拉取原镜像。
  • 镜像路径/名称问题:原镜像路径包含日期格式的目录20230801,检查仓库是否对这类路径有特殊限制,或存在大小写敏感问题(部分Registry配置可能区分大小写)。
  • CI/CD推送完整性:检查GitLab CI/CD构建日志,确认镜像推送过程是否完整,是否存在manifest推送超时、权限不足导致的推送失败情况。

内容的提问来源于stack exchange,提问作者Lewis Sampson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:03:18