极狐GitLab 容器镜像仓库故障排查

要解决极狐GitLab容器镜像仓库中的大多数问题,您必须以管理员权限登录极狐GitLab。

您可以在极狐GitLab容器镜像仓库管理文档中找到其他故障排除信息

将 OCI 容器镜像迁移到极狐GitLab 容器镜像仓库#

不支持将容器镜像迁移到极狐GitLab 仓库。

您可以使用第三方工具迁移容器镜像。例如,skopeo 可以在各种存储机制之间复制容器镜像。您可以使用 skopeo 从容器镜像仓库、容器存储后端、本地目录和本地 OCI 布局目录复制到极狐GitLab容器镜像仓库。

Docker 连接错误#

当群组、项目或分支名称中包含特殊字符时,可能会出现 Docker 连接错误。特殊字符包括:

  • 前导下划线。
  • 结尾连字符或破折号。

要解决此错误,您可以更改群组路径项目路径或分支名称。

如果您使用 Docker Engine 17.11 或更早版本,可能会收到 404 Not FoundUnknown Manifest 错误消息。当前版本的 Docker Engine 使用 v2 API。

您在极狐GitLab容器镜像仓库中的镜像必须使用 Docker v2 API。

推送清单列表时的 Blob unknown to registry 错误#

当推送 Docker 清单列表到极狐GitLab容器镜像仓库时,您可能会收到错误消息 manifest blob unknown: blob unknown to registry。此错误很可能是由于在多个存储库中分布了具有不同架构的多个镜像,而不是在同一个存储库中。

例如,您可能有两个镜像,每个镜像代表一个架构:

  • amd64 平台。
  • arm64v8 平台。

要使用这些镜像构建多架构镜像,您必须将它们推送到与多架构镜像相同的存储库中。

要解决 Blob unknown to registry 错误,请在单个镜像的标签名称中包含架构。例如,使用 mygroup/myapp:1.0.0-amd64mygroup/myapp:1.0.0-arm64v8。然后,您可以使用 mygroup/myapp:1.0.0 标记清单列表。

无法更改项目路径或转移项目#

如果您尝试更改项目路径或将项目转移到新命名空间,您可能会收到以下错误之一:

  • 项目无法转移,因为其容器镜像仓库中存在标签。
  • 命名空间无法移动,因为至少一个项目的容器镜像仓库中有标签。

当项目在容器镜像仓库中有镜像时,会发生此错误。您必须删除或移动这些镜像,然后才能更改路径或转移项目。

以下过程使用这些示例项目名称:

  • 对于当前项目:gitlab.example.com/org/build/sample_project/cr:v2.9.1
  • 对于新项目:gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1
  1. 在您的计算机上下载 Docker 镜像:

    shell
    docker login gitlab.example.com docker pull gitlab.example.com/org/build/sample_project/cr:v2.9.1
    使用[个人访问令牌](../../profile/personal_access_tokens.md)或[部署令牌](../../project/deploy_tokens/_index.md)来验证您的用户帐户。
  2. 重命名镜像以匹配新项目名称:

    shell
    docker tag gitlab.example.com/org/build/sample_project/cr:v2.9.1 gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1
  3. 使用用户界面API删除旧项目中的镜像。删除期间可能会有延迟。

  4. 更改路径或转移项目:

    1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
    2. 选择 设置 > 常规
    3. 展开 高级 部分。
    4. 更改路径 文本框中,编辑路径。
    5. 选择 更改路径
  5. 恢复镜像:

    shell
    docker push gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1

Failed to pull image 信息#

当 CI/CD 作业无法从具有有限CI/CD 作业令牌范围的项目中拉取容器镜像时,您可能会收到Failed to pull image错误信息。

使用 kaniko 推送大型镜像时上传速度慢#

当您使用 kaniko 推送大型镜像时,可能会遇到异常长的延迟。

这通常是由于 kaniko 和 HTTP/2 的性能问题引起的。当前的解决方法是在使用 kaniko 推送时使用 HTTP/1.1。

要使用 HTTP/1.1,请将 GODEBUG 环境变量设置为 "http2client=0"

OCI manifest found, but accept header does not support OCI manifests 错误#

如果您无法拉取镜像,仓库日志中可能会出现类似的错误:

plaintext
manifest unknown: OCI manifest found, but accept header does not support OCI manifests

当客户端未提交正确的 Accept: application/vnd.oci.image.manifest.v1+json 标头时,就会发生此错误。确保您的 Docker 客户端版本是最新的。如果您使用的是第三方工具,请确保它可以处理 OCI 清单。