如果您在 Artifact Registry 中管理容器映像时遇到问题,不妨了解以下问题排查步骤。
无法拉取映像或部署到 Google Cloud 运行时环境
请检查以下各项:
验证您要推送的映像的完整路径是否正确。路径必须包含注册表主机名、Google Cloud 项目 ID、代码库和映像。例如:
us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
如需了解详情,请参阅代码库和映像名称。
验证拉取映像的帐号是否具有从代码库读取映像的权限。
- Cloud Build 默认服务帐号对同一 Google Cloud 项目中的代码库拥有读取和写入权限。如果您使用的是用户提供的服务账号或跨项目推送和拉取映像,请向运行构建的服务帐号授予 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 项目中的代码库拥有读取和写入权限。如果您使用的是用户提供的服务账号或跨项目推送和拉取映像,请向运行构建的服务帐号授予 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 无法从注册表中拉取映像。