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

GitLab CI Docker执行器下运行Trivy容器扫描报错如何解决

根因说明

你遇到的报错中前两条关于Docker daemon、Podman的报错属于Trivy运行时顺序检测的中间失败提示,并非核心问题:Trivy默认会依次尝试「本地Docker运行时读取镜像」「本地Podman运行时读取镜像」「远程拉取镜像」三种扫描路径,前两种方式在你默认的Docker执行器环境下本身就没有对应依赖,只要第三种方式失败才会最终抛出致命错误。你遇到的核心报错是第三条MANIFEST_UNKNOWN: manifest unknown,即Trivy无法拉取到你指定的目标镜像。

解决思路

  • 方案1:本地镜像导出扫描(最稳妥,无额外权限/配置依赖)
    如果你的镜像为流水线内刚构建完成、还未推送到GitLab Registry的场景,推荐直接将本地镜像导出为tar包扫描:
  1. 镜像构建完成后执行命令:
    docker save $FULL_IMAGE_NAME > ./image.tar
  2. 修改Trivy扫描命令,指定输入为本地tar包:
time trivy --exit-code 0 --cache-dir .trivycache/ --no-progress --format template --template "@/contrib/gitlab.tpl" --output "$CI_PROJECT_DIR/gl-container-scanning-report.json" --input ./image.tar
  • 方案2:直接扫描远程Registry镜像
    如果需要扫描已经推送到GitLab Registry的已有镜像:
  1. 先手动确认$FULL_IMAGE_NAME变量取值正确,对应镜像Tag确实存在于你的GitLab Registry中
  2. 在Trivy任务的variables块中添加私有Registry访问凭证的环境变量,让Trivy有权限拉取私有镜像:
variables:
  TRIVY_USERNAME: $CI_REGISTRY_USER
  TRIVY_PASSWORD: $CI_REGISTRY_PASSWORD
  • 方案3:走本地Docker运行时扫描逻辑
    如果你希望复用Runner本地的Docker镜像缓存扫描:
  1. 找到对应Runner的config.toml配置文件,在[runners.docker]配置段的volumes配置项中添加docker.sock挂载:
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
  1. 重启Runner服务生效即可,后续Trivy就能直接读取Runner本地的Docker镜像缓存。

内容的提问来源于stack exchange,提问作者Josh Edgar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:15:00