使用Circle CI aws-ecr-orb推送镜像至AWS私有仓库时遇400错误
CircleCI推送AWS ECR时400 Bad Request错误的原因分析
错误日志
#16 exporting to image #16 sha256:7dd518c28ca8d9b4a669654c56822c182f0329e5b5897d4cc9241360bd781320 #16 pushing layers 3.4s done #16 pushing manifest for ************.dkr.ecr.*********.amazonaws.com/***********:latest@sha256:73bcacc452698bb9bc03feb199ffde7d62016bfb46b783c436f9c8e5a8a69e32 #16 pushing manifest for ************.dkr.ecr.*********.amazonaws.com/***********:latest@sha256:73bcacc452698bb9bc03feb199ffde7d62016bfb46b783c436f9c8e5a8a69e32 0.3s done #16 ERROR: failed to push ************.dkr.ecr.*********.amazonaws.com/***********:latest: failed commit on ref "manifest-sha256:73bcacc872698bb9bc03feb199ffde7d62016bfb46b783c436f9c8e5a8a69e32": unexpected status: 400 Bad Request ------ > exporting to image: ------ error: failed to solve: rpc error: code = Unknown desc = failed to push ************.dkr.ecr.*********.amazonaws.com/***********:latest: failed commit on ref "manifest-sha256:73bcacc872698bb9bc03feb199ffde7d62016bfb46b783c436f9c8e5a8a69e32": unexpected status: 400 Bad Request Exited with code exit status 1 CircleCI received exit code 1
常见触发原因
- 镜像清单格式不兼容:AWS ECR仅支持特定版本的Docker镜像清单(如Manifest V2 Schema 2),若构建生成旧版Schema 1格式或未被正确识别的OCI格式,会触发400错误。部分旧版本Docker构建工具或自定义构建参数可能生成不符合要求的清单。
- 镜像标签/仓库名称违规:ECR对仓库名和标签的字符有严格限制,仅允许小写字母、数字、连字符、下划线、点号和斜杠,且不能以特殊字符开头或结尾。如果镜像标签或仓库名包含违规字符,推送时会返回400。
- 多架构镜像配置问题:若构建的是多架构镜像(multi-arch),但ECR仓库未开启对应支持,或构建工具生成的多架构清单存在格式错误,会导致清单提交失败。
- CircleCI ECR Orb版本过时:旧版本的aws-ecr-orb可能与AWS ECR的最新API规范不兼容,发送的请求格式不符合ECR要求,从而触发400错误。
- IAM角色请求签名异常:虽然Layer推送成功,但清单提交时的IAM请求签名格式有误(比如角色权限配置中缺少
ecr:PutImage权限,或信任关系配置错误),也可能导致ECR返回400而非403权限错误。
内容的提问来源于stack exchange,提问作者Promise Preston
相关产品推荐
相关产品推荐

