无法将Docker镜像推送至Elastic Container Registry(ECR)问题求助
Windows环境下ECR镜像推送未授权问题解决方案(已完成仓库创建、docker登录成功场景)
相关错误场景说明:已创建ECR仓库,完成AWS身份验证且docker login操作成功,但推送镜像时仍提示未授权;使用Windows系统,尝试sudo命令无效。
排查&解决步骤
- 核对镜像标签格式是否完全匹配ECR要求
ECR要求推送的镜像必须使用完整格式标签:<AWS账户ID>.dkr.ecr.<区域代码>.amazonaws.com/<ECR仓库名>:<自定义标签>,请检查账户ID、区域代码、仓库名三个字段是否完全匹配你创建的ECR配置,任意字段拼写错误都会触发未授权报错。 - 核对AWS身份的推送权限
docker login成功仅代表你拥有ECR的登录权限,不代表拥有镜像推送权限。请确认你获取登录凭证所用的IAM身份(用户/角色)已附加包含ecr:PutImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload权限的策略,例如AWS托管策略AmazonEC2ContainerRegistryPowerUser。你可以在Windows终端执行aws sts get-caller-identity命令查看当前生效的IAM身份,再前往IAM控制台核对对应身份的权限配置。 - 清理Windows凭据管理器中的过期ECR凭证
Windows Docker Desktop默认会将登录凭证存储在系统凭据管理器中,旧的过期ECR凭证未清除时,即使重新执行login成功,Docker推送时仍会调用旧凭证导致报错。操作步骤:- 搜索打开Windows「凭据管理器」
- 切换到「Windows凭据」分类,删除所有域名匹配你的ECR地址(
<AWS账户ID>.dkr.ecr.<区域代码>.amazonaws.com)的凭证 - 重新执行ECR登录命令后再次尝试推送
- 使用正确的Windows版ECR登录命令
Windows环境无需添加sudo前缀,推荐使用AWS CLI v2执行如下登录命令,避免手动输入密码导致的凭证错误:aws ecr get-login-password --region <替换为你的ECR所在区域> | docker login --username AWS --password-stdin <替换为你的AWS账户ID>.dkr.ecr.<替换为你的ECR所在区域>.amazonaws.com
内容的提问来源于stack exchange,提问作者Siddharth Sharma
相关产品推荐
相关产品推荐

