Helm推送Helm Chart至指定ECR仓库失败求助
问题根源
ECR作为OCI注册表,不支持在现有仓库下创建子路径/嵌套仓库,你指定的$ECR_REPO(比如parentfolder/project-chart)必须是预先创建好的独立ECR仓库,而非基础仓库下的子目录。另外,原命令中将版本号$HELM_VERSION直接拼接在仓库路径后作为后缀的格式,不符合Helm推送OCI的规范,这也是触发报错的原因之一。
具体修复步骤
创建目标ECR仓库
确保要推送的目标路径对应的ECR仓库已存在。比如如果你的$ECR_REPO是parentfolder/project-chart,需通过AWS控制台或CLI创建同名ECR仓库:aws ecr create-repository --repository-name parentfolder/project-chart --region us-east-1修正Helm推送命令格式
Helm推送OCI Chart时,版本号需通过正确方式指定,两种有效格式如下:# 方式1:用--version参数指定版本 helm push ./$chart_name-$HELM_VERSION.tgz oci://$HELM_ECR_REGISTRY/$ECR_REPO --version $HELM_VERSION # 方式2:将版本作为标签附加在仓库路径后(需确保仓库已创建) helm push ./$chart_name-$HELM_VERSION.tgz oci://$HELM_ECR_REGISTRY/$ECR_REPO:$HELM_VERSION注意:方式2中
$ECR_REPO本身不能包含冒号,且对应仓库必须提前创建,否则仍会触发EOF错误。验证目标仓库权限
虽然你能成功推送至基础路径,但需确认当前AWS凭证对目标ECR仓库拥有以下权限:ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability、ecr:PutImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload。
额外说明
ECR允许仓库名称带斜杠(如parentfolder/project-chart),但这只是仓库的命名格式,并非真正的嵌套结构。如果未预先创建该仓库,Helm推送时会因找不到对应仓库返回EOF错误——这是ECR的固有限制,它不会像部分公共注册表那样自动创建嵌套仓库。
内容的提问来源于stack exchange,提问作者Manju Manohar

