排查容器映像问题

了解在 Artifact Registry 中管理容器映像时可能有助于进行排查的问题排查步骤。

无法拉取映像或部署到 Google Cloud 运行时环境

请检查以下各项:

  1. 验证要推送的映像的完整路径是否正确。路径必须包含注册表主机名、Google Cloud 项目 ID、代码库和映像。例如:

    us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
    

    如需了解详情,请参阅代码库和映像名称

  2. 验证拉取映像的账号是否 权限

    • Cloud Build 默认服务账号具有读写权限 同一个 Google Cloud 项目中的代码库。如果您使用的是用户提供的服务账号,或者跨项目推送和拉取映像,请向运行 build 的服务账号授予 Artifact Registry Writer 角色。
    • 默认情况下,Compute Engine、Cloud Run 和 Google Kubernetes Engine 对同一项目中的代码库拥有读取权限。如果 Artifact Registry 与运行时环境位于不同的项目中,您必须向运行时服务账号授予 Artifact Registry Reader 角色。
    • 如果您使用的是 Docker 或其他第三方工具,则必须执行以下操作:

无法将映像推送到 Artifact Registry

请检查以下各项:

  1. 验证代码库是否存在。与 Container Registry 不同 创建映像与推送第一个映像是一个单独的操作如果 代码库不存在,请创建该代码库。

  2. 验证您要推送的映像的完整路径是否正确。路径必须包含注册表主机名、Google Cloud 项目 ID、代码库和映像。例如:

    us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
    

    每个 Artifact Registry 代码库都是单独的资源,因此无法推送 将映像转换为没有仓库的路径例如: “us-east1-docker.pkg.dev/my-project/my-image:v1”是无效的图片路径。

    如需了解详情,请参阅代码库和映像名称

  3. 验证推送映像的账号是否 权限来写入代码库。

    • Cloud Build 默认服务账号具有读写权限 同一个 Google Cloud 项目中的代码库。如果您使用的是用户提供的服务账号,或者跨项目推送和拉取映像,请向运行 build 的服务账号授予 Artifact Registry Writer 角色。
    • 默认情况下,Compute Engine、Cloud Run 和 Google Kubernetes Engine 同一项目中的代码库的权限。如果您使用的是 使用第三方工具推送映像 向运行时服务账号授予 Artifact Registry Writer 角色。
  4. 如果 Artifact Registry 返回了消息 The repository has enabled tag immutability,则表示为代码库配置了标记不可变性。您无法推送标记已在代码库中用于该映像的另一个版本的图片。尝试推送 以及映像的其他已存储版本 图片。

    如需验证存储库是否已配置为使用不可变映像标记,请查看 Google Cloud 控制台中存储库列表中的不可变映像标记列,或运行以下命令:

    gcloud artifacts repositories describe REPOSITORY
        --project=PROJECT-ID
        --location=LOCATION
    

ImagePullBackOff 和 ErrImagePull 消息

包含 ImagePullBackOffErrImagePull 的消息表示 GKE 无法从注册表中拉取映像。