疑难解答亚马逊 ECR 错误消息 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

疑难解答亚马逊 ECR 错误消息

某些情况下,通过 Amazon ECS 控制台或Amazon CLI退出时出现错误消息。一些常见错误消息和可能的解决办法解释如下。

Error: “来自守护程序的错误响应:注册表终端节点无效”

运行时,您可能会看到以下错误aws ecr get-login命令获取 Amazon ECR 存储库的登录凭证:

Error response from daemon: invalid registry endpoint https://xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v0/: unable to ping registry endpoint https://xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v0/ v2 ping attempt failed with error: Get https://xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/: dial tcp: lookup xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com on 172.20.10.1:53: read udp 172.20.10.1:53: i/o timeout

运行 Docker 工具箱、Docker 适用于 Windows 或 Docker 适用于的 Mac 的 macOS 和 Windows 系统上,可能出现此错误。导致此问题的原因通常是:其他应用程序在通过本地网关更改路由器 (192.168.0.1) 时,虚拟机必须通过调用本地网关才能访问 Amazon ECR 服务。如果使用 Docker 工具箱时出现此错误,通常可以通过重启 Docker 系统环境,或重新启动本地客户端的操作系统来解决。如果该方法未能解决问题,可使用 docker-machine ssh 命令登录容器实例。可在外部主机上执行 DNS 查找,以验证其结果是否与本地主机上的结果相同。如果结果不同,请参考 Docker 工具箱的文档,确保 Docker 系统环境已正确配置。

HTTP T429:请求过多或 ThrottleException

您可能会收到429: Too Many Requests错误或ThrottleException错误,从一个或多个 Amazon ECR 命令或 API 调用。如果您在 Amazon ECR 中使用 Docker 工具,那么对于 Docker 1.12.0 版及更高版本,您可能会看到错误消息TOOMANYREQUESTS: Rate exceeded。对于 1.12.0 以下的 Docker 版本,您可能会看到错误 Unknown: Rate exceeded

这表示您在短时间内重复调用 Amazon ECR 中的单个终端节点,并且您的请求受限制。单个用户在一段时间内,调用单个终端节点的次数超过特定阈值时,就会产生限制。

Amazon ECR 中的各种 API 操作有不同的限制。

例如,GetAuthorizationToken 操作的限制为每秒 20 个事务 (TPS),允许高达 200 TPS 的突增。在每个区域,每个账户会收到一个可存储多达 200 点 GetAuthorizationToken 积分的存储桶。这些积分以每秒 20 点的速度补充。如果您的存储桶有 200 点积分,则可实现每秒 200 个 GetAuthorizationToken API 事务 (持续一秒),然后无限期地维持每秒 20 个事务。

要处理限制错误,请在代码中实施增量退避重试函数。有关更多信息,请参阅 。中的错误重试和指数退避Amazon中的Amazon Web Services 一般参考

HTTP 403:“用户 [arn] 没有执行 [操作] 的权限”

尝试通过 Amazon ECR 执行操作时,您可能会收到以下错误:

$ aws ecr get-login A client error (AccessDeniedException) occurred when calling the GetAuthorizationToken operation: User: arn:aws:iam::account-number:user/username is not authorized to perform: ecr:GetAuthorizationToken on resource: *

这表示您的用户没有获得使用 Amazon ECR 的权限,或者这些权限设置不正确。特别是,如果您对 Amazon ECR 存储库执行操作,请验证是否已授予用户访问该存储库的权限。有关创建 Amazon ECR 权限并验证 Amazon ECR 权限的更多信息,请参阅Amazon Elastic Container Registry 的 Identity and Access Management

HTTP 404:“存储库不存在" 错误

如果您指定了当前不存在的 Docker Hub 存储库,Docker Hub 会自动创建存储库。使用 Amazon ECR,新存储库必须在使用前显式创建。这会防止意外创建新存储库 (例如,由于输入错误),也可确保为所有新存储库明确分配适当的安全访问策略。有关创建存储库的更多信息,请参阅Amazon ECR 私有存储库