You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

推送Docker镜像至AWS ECR时遇denied: Not Authorized错误如何解决?

解决AWS ECR镜像推送的权限与认证错误

针对 denied: Not Authorized 错误的排查步骤

  • 核对IAM用户的权限关联:确保你配置的那几个权限策略(比如AmazonEC2ContainerRegistryFullAccess)确实直接附加到了该IAM用户,而非仅存在于用户组但用户未加入对应组。
  • 检查AWS CLI配置的正确性:执行 aws configure list 查看当前使用的AWS账号ID、区域是否和你的ECR仓库一致。如果用了多profile,要确保操作时指定了正确的profile(比如加 --profile <你的profile名>)。
  • 验证ECR仓库的资源策略:登录AWS控制台进入对应ECR仓库,查看「权限」标签下的资源策略,确认策略中允许该IAM用户执行 ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage 这些推送必需的操作。
  • 确认镜像标签格式:镜像必须打正确的ECR仓库标签,格式为 [AWS账号ID].dkr.ecr.[区域].amazonaws.com/[仓库名]:[版本标签],标签错误会直接触发权限拒接。

针对 no basic auth credentials 错误的解决方法

这个错误是Docker没有拿到ECR的认证凭据,必须用AWS CLI生成并传递给Docker:

  1. 先确保AWS CLI已经正确配置(执行 aws configure 输入正确的access key、secret key、区域)。
  2. 执行以下命令完成Docker登录ECR:
    aws ecr get-login-password --region <你的ECR区域> | docker login --username AWS --password-stdin <你的AWS账号ID>.dkr.ecr.<你的ECR区域>.amazonaws.com
    
  3. 如果使用多AWS profile,需要在命令中指定profile:
    aws ecr get-login-password --region us-east-1 --profile my-custom-profile | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
    

    注意:不要使用旧版的 aws ecr get-login 命令,该命令已被官方弃用,会导致认证失败。

通用验证步骤

  • 先测试IAM用户是否能访问ECR仓库:执行 aws ecr describe-repositories --repository-names <你的仓库名>,如果能返回仓库信息,说明权限配置没问题;如果报错,优先排查IAM权限或账号配置。
  • 检查Docker运行环境:如果用了WSL2、远程Docker主机等非本地默认环境,需要在对应环境中执行AWS CLI配置和Docker登录命令,确保认证信息同步到该环境的Docker中。
  • 排查MFA限制:如果你的IAM用户启用了MFA,需要生成带MFA的临时凭证(通过 aws sts get-session-token 命令),并将临时凭证配置到AWS CLI中,否则无法完成认证。

内容的提问来源于stack exchange,提问作者Ivan Correa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:30:09