了解在 Artifact Registry 中管理容器映像时可能有助于进行排查的问题排查步骤。
无法拉取映像或部署到 Google Cloud 运行时环境
请检查以下各项:
验证要推送的映像的完整路径是否正确。路径必须包含注册表主机名、Google Cloud 项目 ID、代码库和映像。例如:
us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
如需了解详情,请参阅代码库和映像名称。
验证拉取映像的账号是否 权限。
- Cloud Build 默认服务账号具有读写权限 同一个 Google Cloud 项目中的代码库。如果您使用的是用户提供的服务账号,或者跨项目推送和拉取映像,请向运行 build 的服务账号授予 Artifact Registry Writer 角色。
- 默认情况下,Compute Engine、Cloud Run 和 Google Kubernetes Engine 对同一项目中的代码库拥有读取权限。如果 Artifact Registry 与运行时环境位于不同的项目中,您必须向运行时服务账号授予 Artifact Registry Reader 角色。
如果您使用的是 Docker 或其他第三方工具,则必须执行以下操作:
- 向与代码库交互的账号授予权限。
配置客户端以对代码库进行身份验证。
无法将映像推送到 Artifact Registry
请检查以下各项:
验证代码库是否存在。与 Container Registry 不同 创建映像与推送第一个映像是一个单独的操作如果 代码库不存在,请创建该代码库。
验证您要推送的映像的完整路径是否正确。路径必须包含注册表主机名、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
”是无效的图片路径。如需了解详情,请参阅代码库和映像名称。
验证推送映像的账号是否 权限来写入代码库。
- Cloud Build 默认服务账号具有读写权限 同一个 Google Cloud 项目中的代码库。如果您使用的是用户提供的服务账号,或者跨项目推送和拉取映像,请向运行 build 的服务账号授予 Artifact Registry Writer 角色。
- 默认情况下,Compute Engine、Cloud Run 和 Google Kubernetes Engine 同一项目中的代码库的权限。如果您使用的是 使用第三方工具推送映像 向运行时服务账号授予 Artifact Registry 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 无法从注册表中拉取映像。