了解您在管理 Artifact Registry 中的容器映像时遇到问题时可能有助于进行问题排查的步骤。
Docker CLI 中的项目 ID 语法
由于 Docker 处理冒号的方式,当您使用 Docker CLI 时,必须
将项目 ID 中的冒号 (:) 替换为正斜杠 (/)。
如需了解详情,请参阅网域级项目。
无法拉取映像或部署到 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 Reader 角色
(
roles/artifactregistry.reader)。 - 对于 Cloud 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 服务帐号,您必须向运行构建的服务帐号授予
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 无法从注册表中拉取映像。