本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查 Amazon ECR 错误消息问题
有时,通过 Amazon ECR 控制台或 Amazon CLI 发起的 API 调用会存在错误消息。一些常见错误消息和可能的解决办法解释如下。
HTTP 429:请求过多或 ThrottleException
您可能会从一个或多个 Amazon ECR 操作或 API 调用收到 429: Too Many Requests
错误或 ThrottleException
错误。这表示由于您在短时间内重复调用 Amazon ECR 中的单个终端节点,您的请求已受限制。单个用户在一段时间内,调用单个终端节点的次数超过特定阈值时,就会产生限制。
Amazon ECR 中的每个 API 操作都有一个与之相关的速率限制。例如,GetAuthorizationToken
操作的限制为每秒 20 个事务 (TPS),允许高达 200 TPS 的突增。在每个区域,每个账户会收到一个可存储多达 200 点 GetAuthorizationToken
积分的存储桶。这些积分以每秒 20 点的速度补充。如果您的存储桶有 200 点积分,则可实现每秒 200 个 GetAuthorizationToken
API 事务 (持续一秒),然后无限期地维持每秒 20 个事务。有关 Amazon ECR API 速率限制的更多信息,请参阅 亚马逊ECR服务配额。
要处理限制错误,请在代码中实施增量退避重试函数。有关更多信息,请参阅 Amazon SDKs and Tools Reference Guide 中的 Retry behavior。另一种选择是请求提高速率限制,您可以使用服务配额控制台执行此操作。。
HTTP 403:“User [arn] is not authorized to perform [operation]”(用户 [arn] 没有执行 [operation] 的权限)
尝试通过 Amazon ECR 执行操作时,您可能会收到以下错误:
$
aws ecr get-login-password
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 Elastic Container Registry 的 Identity and Access Management。
HTTP 404:“Repository Does Not Exist”(存储库不存在) 错误
如果您指定了当前不存在的 Docker Hub 存储库,Docker Hub 会自动创建存储库。但在使用 Amazon ECR 时,新存储库必须在使用前显式创建。这会防止意外创建新存储库 (例如,由于输入错误),也可确保为所有新存储库明确分配适当的安全访问策略。有关创建存储库的更多信息,请参阅 Amazon ECR 私有存储库。
错误:无法从非 TTY 设备执行交互式登录
如果您收到错误 Cannot perform an interactive login from a non TTY
device
,则以下故障排除步骤应该会有所帮助。
-
请确认您是否使用的是 Amazon CLI 版本 2,以及您的系统上有无 Amazon CLI 版本 1 的冲突版本。有关更多信息,请参阅安装或更新 Amazon CLI 的最新版本。
-
请确认您是否使用有效凭证对您的 Amazon CLI 进行了配置。有关更多信息,请参阅安装或更新 Amazon CLI 的最新版本。
-
请确认您的 Amazon CLI 命令语法是否正确。