AWS公有ECR仓库推送镜像时docker login报错400 Bad Request问题求助
公有ECR登录400错误解决方案
核心错误原因
你当前使用的是私有ECR的认证命令,公有ECR与私有ECR的认证接口完全独立,且公有ECR的认证请求必须发往固定区域us-east-1,与你的仓库所在区域无关,这是私有ECR正常但公有ECR登录失败的核心原因。
修复步骤
- 替换为公有ECR专属登录命令,直接复制执行即可:
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
该写法同时解决了原命令中--password参数不安全的警告。
权限校验
如果执行上述命令后仍然报错,需要为你的IAM用户/角色添加公有ECR专属权限,最小可用权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr-public:BatchCheckLayerAvailability", "ecr-public:GetRepositoryPolicy", "ecr-public:DescribeRepositories", "ecr-public:DescribeImages", "ecr-public:InitiateLayerUpload", "ecr-public:UploadLayerPart", "ecr-public:CompleteLayerUpload", "ecr-public:PutImage" ], "Resource": "arn:aws:ecr-public::${你的AWS账号ID}:repository/${你的公有ECR仓库名}" } ] }
额外踩坑排查
- 确认AWS CLI版本高于1.18.96或者2.x版本,旧版本CLI不支持
ecr-public相关命令 - 执行登录前可运行
aws sts get-caller-identity校验本地AWS凭证是否有效、是否为预期调用身份 - 后续推送镜像前打标签需要符合公有ECR格式:
public.ecr.aws/${你的仓库别名}/${镜像名}:${标签},你提供的仓库别名为m8r0s3o9,示例标签命令为docker tag 本地镜像名:标签 public.ecr.aws/m8r0s3o9/本地镜像名:标签
内容的提问来源于stack exchange,提问作者omankame
相关产品推荐
相关产品推荐

