Amazon ECR
用户指南 (API Version 2015-09-21)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon ECR 错误消息问题排查

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

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

运行 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 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 执行操作时,您可能会收到以下错误:

$ 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 存储库