Amazon ECR
用户指南 (API Version 2015-09-21)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon ECR 错误消息问题排查

有时,通过 Amazon ECS 控制台或 AWS CLI 或触发的 API 调用会存在错误消息。一些常见错误消息和可能的解决办法解释如下。

运行 aws ecr get-login 时出现错误:“Error Response from Daemon: Invalid Registry Endpoint”(守护程序响应出错:注册表终端节点无效)

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

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

HTTP 429:请求过多或 ThrottleException

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

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

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

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

注意

目前,不能按账户来增加 GetAuthorizationToken 操作的限制。

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

HTTP 403:“User [arn] is not authorized to perform [operation]”(用户 [arn] 没有执行 [operation] 的权限)

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

Copy
$ 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 IAM 策略和角色

HTTP 404:“Repository Does Not Exist”(存储库不存在)错误

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