AWS ECR执行docker登录报UnrecognizedClientException错误如何排查?
AWS ECR登录异常排查解决步骤
核心问题说明
你遇到的两个报错中,UnrecognizedClientException是根因,Cannot perform an interactive login from a non TTY device是衍生问题:前者导致aws命令没有输出有效密码,docker login收不到stdin传入的密码才会尝试交互式登录,修复前者后第二个问题会自动消失。
排查步骤
- 检查执行命令的用户一致性:如果你执行
aws configure用的是普通用户,执行登录命令时加了sudo,sudo会读取/root/.aws下的凭证而非当前用户的配置,要么统一用相同用户执行所有命令,要么将当前用户加入docker组避免使用sudo执行docker命令。 - 排查凭证优先级覆盖问题:
- 执行
printenv | grep AWS检查是否存在AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN相关环境变量,AWS CLI会优先读取环境变量的凭证,优先级高于aws configure写入的配置,如有无效的环境变量直接unset对应变量后重试。 - 执行
cat ~/.aws/credentials确认配置的access key、secret key和你确认有效的凭证完全一致,没有多余的空格、换行或输入错误。 - 执行
ls -la ~/.aws/检查credentials和config文件权限为600,所属用户为当前执行命令的用户,权限异常会导致AWS CLI无法读取配置。
- 执行
- 验证凭证有效性:执行
aws sts get-caller-identity,如果返回正确的AWS账号ID、ARN信息说明凭证读取正常,如报错说明CLI未拿到有效凭证。 - 排查系统时间同步问题:AWS要求请求方时间和服务端时间偏差不超过15分钟,否则签名验证会失败触发token无效报错。执行
date对比系统时间和标准时间,偏差过大时执行sudo ntpdate pool.ntp.org同步时间后重试。 - 排查区域与账号匹配问题:确认命令中指定的
us-east-2区域和ECR地址中的区域一致,同时确认配置凭证对应的AWS账号和ECR地址中的12位账号ID匹配,跨账号无权限也会触发类似报错。
内容的提问来源于stack exchange,提问作者Ashish Sharma
相关产品推荐
相关产品推荐

