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

Jenkins流水线推送镜像至AWS ECR安全扫描报UNSUPPORTED_IMAGE错误

报错根因

ECR返回UNSUPPORTED_IMAGE错误,本质是推送的镜像不符合ECR安全扫描支持的格式要求,结合你的配置和节点环境,具体诱因有两点:

  • 你当前使用的Jenkins Docker云代理镜像内置Docker版本过旧,默认构建生成Docker schema v1格式的镜像manifest,AWS ECR目前所有安全扫描能力都已停止支持v1格式,仅兼容Docker schema v2、OCI标准格式的镜像
  • 流水线配置存在疏漏:repo变量未提前声明,构建步骤没有显式指定构建上下文路径和格式兼容参数,旧版Docker客户端会直接沿用默认配置生成不兼容的镜像格式。
修复步骤

1. 调整节点Docker配置

优先把Jenkins Docker从节点的Docker版本升级到20.10及以上稳定版,新版Docker默认构建生成schema v2格式镜像,天然兼容ECR扫描要求。如果暂时无法替换节点基础镜像,构建时可以通过开启BuildKit强制输出兼容格式的镜像。

2. 修正流水线配置

补全缺失的变量定义、修正语法缩进问题、显式指定构建参数,调整后的参考配置如下:

def customTag = 'thisiscustomTag'
// 提前定义ECR相关配置,替换为你实际的账号、区域、仓库名
def awsAccountId = '000000000000'
def awsRegion = 'eu-central-1'
def ecrRegistry = "${awsAccountId}.dkr.ecr.${awsRegion}.amazonaws.com"
def repoName = '替换为你的实际ECR仓库名称'
def fullImageAddr = "${ecrRegistry}/${repoName}"

pipeline {
    agent {
        label 'docker' 
    }    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'master',
                credentialsId: 'test-credentials',
                url: 'https://test.repo.git'
            }
        }
        stage('Building image') {
            steps {
                script {
                    // 开启BuildKit强制构建兼容v2/OCI格式的镜像
                    withEnv(['DOCKER_BUILDKIT=1']){
                        docker.withRegistry(
                            "https://${ecrRegistry}",
                            "ecr:${awsRegion}:${awsAccountId}") {
                                // 显式指定镜像地址、Dockerfile路径和构建上下文
                                myImage = docker.build(fullImageAddr, "--pull -f Dockerfile .")
                            }
                    }
                }
            }
        }
        stage('Pushing to ECR') {
            steps {
                script {
                    docker.withRegistry(
                        "https://${ecrRegistry}",
                        "ecr:${awsRegion}:${awsAccountId}") {
                            // 推送自定义标签镜像
                            myImage.push(customTag)
                            // 业务需要的话可以额外推送latest标签
                            // myImage.push("latest")
                        }
                }
            }
        }
    }
}

3. 结果验证

重新执行流水线推送镜像后,可在ECR控制台查看对应镜像标签的manifest格式:如果类型为application/vnd.docker.distribution.manifest.v2+json或OCI标准格式,即可正常触发安全扫描,不会再触发UNSUPPORTED_IMAGE报错。

特殊场景排查:如果Dockerfile使用FROM scratch作为基础镜像且没有构建任何有效文件层,也会触发同类报错,常规业务镜像只要格式符合要求就不会出现该问题。

内容的提问来源于stack exchange,提问作者zeus.atr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:33:10