向AWS推送Docker容器执行ECR登录命令时遇未授权错误求助
环境信息
- Docker版本:
24.0.6 - AWS CLI版本:
aws-cli/2.13.17 Python/3.11.5 Linux/5.15.0-83-generic exe/x86_64.ubuntu.20 prompt/off
触发错误的命令
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/m5c0a2h3
错误提示
Error response from daemon: Get "https://public.ecr.aws/v2/": denied: Not Authorized
解决步骤
1. 确认当前AWS身份及权限
- 执行以下命令查看当前AWS CLI使用的身份:
aws sts get-caller-identity - 登录AWS控制台,找到该身份对应的IAM用户/角色,检查是否附加了包含
ecr-public:GetAuthorizationToken的权限政策;若要推送镜像,还需添加ecr-public:BatchCheckLayerAvailability、ecr-public:BatchGetImage、ecr-public:CompleteLayerUpload、ecr-public:GetDownloadUrlForLayer、ecr-public:InitiateLayerUpload、ecr-public:PutImage、ecr-public:UploadLayerPart这些权限。
2. 检查ECR Public仓库状态
- 确认
public.ecr.aws/m5c0a2h3这个公有仓库已经在AWS ECR Public控制台手动创建完成(公有仓库无法自动生成)。 - 检查仓库的权限设置,确保当前AWS身份对该仓库有读写权限。
3. 验证AWS CLI配置有效性
- 执行以下命令检查当前CLI配置:
aws configure list - 确认
region是us-east-1(ECR Public仅支持该区域),access_key和secret_key有效且未过期。如果配置有误,执行aws configure重新设置,或检查环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY是否覆盖了配置文件内容。
4. 排查Docker登录命令问题
- 先单独获取登录密码,确认能正常返回:
aws ecr-public get-login-password --region us-east-1 - 若密码能正常获取,手动执行Docker登录命令测试:
docker login --username AWS --password <刚才获取的密码> public.ecr.aws/m5c0a2h3 - 确认仓库URI是否正确,
public.ecr.aws后的前缀必须是你创建的公有仓库的注册表别名,不能随意填写。
5. 清理Docker缓存凭证
- 先登出当前ECR Public的登录状态:
docker logout public.ecr.aws - 然后重新执行最初的登录命令,避免缓存的无效凭证导致失败。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

