了解在 Artifact Registry 中管理容器映像时可能有助于进行排查的问题排查步骤。
无法拉取映像或部署到 Google Cloud 运行时环境
请检查以下各项:
- 验证您要推送的映像的完整路径是否正确。该路径必须包含注册表主机名、 Google Cloud、项目 ID、代码库和映像。例如:
如需了解详情,请参阅代码库和映像名称。us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1
- 验证拉取映像的账号是否具有从代码库读取的正确权限。如果您停用了向服务账号自动授予角色的功能,则必须向运行时服务账号授予 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
请尝试以下操作:
- 验证代码库是否存在。与 Container Registry 不同,代码库创建是与推送第一个映像的操作分开的。如果代码库不存在,请创建它。
- 验证您要推送的映像的完整路径是否正确。该路径必须包含注册表主机名、 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
是无效的图片路径。如需了解详情,请参阅代码库和映像名称。
- 验证推送映像的账号是否具有写入代码库的权限。如果您停用了向服务账号自动授予角色,则必须向运行时服务账号授予 Artifact Registry 角色。
- 对于 Compute Engine、Cloud Run 和 Google Kubernetes Engine 服务账号,您必须向运行时服务账号授予 Artifact Registry Writer 角色 (
roles/artifactregistry.writer
)。 - 对于 Cloud Build 服务账号,您必须向运行 build 的服务账号授予 Artifact Registry Writer 角色 (
roles/artifactregistry.writer
)。 - 如果 Artifact Registry 返回消息
The repository has enabled tag immutability
,则表示为代码库配置了标记不可变性。您无法推送标记已在代码库中用于该映像的另一个版本的图片。请尝试使用未被其他存储的图片版本使用的标记再次推送图片。如需验证代码库是否已配置为使用不可变映像标记,请在 Google Cloud 控制台中查看代码库列表中的不可变映像标记列,或运行以下命令:
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATION
ImagePullBackOff 和 ErrImagePull 消息
包含 ImagePullBackOff
和 ErrImagePull
的消息表示 GKE 无法从注册表中拉取映像。