排查容器映像问题

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

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

请检查以下各项:

  1. 验证您要推送的映像的完整路径是否正确。该路径必须包含注册表主机名、 Google Cloud、项目 ID、代码库和映像。例如:
    us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1
    如需了解详情,请参阅代码库和映像名称
  2. 验证拉取映像的账号是否具有从代码库读取的正确权限。如果您停用了向服务账号自动授予角色的功能,则必须向运行时服务账号授予 Artifact Registry 角色。
    • 对于 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服务账号,您必须向运行时服务账号授予 Artifact Registry 读取者角色 (roles/artifactregistry.reader)。
    • 对于 Cloud Build 服务账号,您必须向运行 build 的服务账号授予 Artifact Registry Writer 角色 (roles/artifactregistry.writer)。
    • 如果您使用的是 Docker 或其他第三方工具,则必须满足以下条件:

无法将映像推送到 Artifact Registry

请尝试以下操作:

  1. 验证代码库是否存在。与 Container Registry 不同,代码库创建是与推送第一个映像的操作分开的。如果代码库不存在,请创建它。
  2. 验证您要推送的映像的完整路径是否正确。该路径必须包含注册表主机名、 Google Cloud 项目 ID、代码库和映像。例如:
    us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1
      

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

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

  3. 验证推送映像的账号是否具有写入代码库的权限。如果您停用了向服务账号自动授予角色,则必须向运行时服务账号授予 Artifact Registry 角色。
    • 对于 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服务账号,您必须向运行时服务账号授予 Artifact Registry Writer 角色 (roles/artifactregistry.writer)。
    • 对于 Cloud Build 服务账号,您必须向运行 build 的服务账号授予 Artifact Registry Writer 角色 (roles/artifactregistry.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 无法从注册表中拉取映像。