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

如何在本地或GitHub Actions中用Dependabot CLI等工具扫描Docker镜像URL并获无漏洞标签建议

扫描Docker镜像并获取无漏洞标签建议的方法

一、本地环境实现方案

1. 正确使用Dependabot CLI扫描

如果你之前用Dependabot没达到预期,大概率是配置没到位,试试以下步骤:

  • 先装Dependabot CLI:用Homebrew的话跑 brew install dependabot/dependabot/dependabot-core,或者RubyGems安装 gem install dependabot-core
  • 本地创建Dependabot配置文件 .github/dependabot.yml,示例配置如下:
version: 2
updates:
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "daily"
    vulnerabilities:
      severity: "critical,high" # 只过滤严重/高危漏洞的镜像标签
    allow:
      - dependency-type: "all"
  • 运行扫描命令:dependabot update docker --directory / --config-file .github/dependabot.yml
  • 注意:私有镜像要提前配置环境变量,比如 export DEPENDABOT_DOCKER_REGISTRY_PASSWORD=你的密码,确保Dependabot能访问仓库。

2. Skopeo + Trivy 组合扫描

Skopeo用来拉全量标签,Trivy做漏洞扫描,两者结合筛选无漏洞标签:

  • 先装工具:Skopeo用 apt install skopeo(Debian/Ubuntu),Trivy跑 brew install aquasecurity/trivy/trivy 或者官网脚本安装
  • 用Skopeo拉取镜像所有标签:skopeo list-tags docker://nginx(替换成你的镜像地址)
  • 写个脚本遍历标签,用Trivy扫描并过滤:
IMAGE="nginx"
# 遍历所有标签,扫描后输出无严重/高危漏洞的标签
skopeo list-tags docker://$IMAGE | jq -r '.Tags[]' | while read TAG; do
  VULN_COUNT=$(trivy image --severity CRITICAL,HIGH --format json $IMAGE:$TAG | jq '.Results[].Vulnerabilities | length')
  if [ "$VULN_COUNT" -eq 0 ]; then
    echo "无严重/高危漏洞的标签: $TAG"
  fi
done
  • 私有镜像要先登录Skopeo:skopeo login registry.example.com,输入账号密码即可。

二、GitHub Actions中实现方案

1. 用Dependabot官方Action自动扫描

直接配置Workflow,让Dependabot自动扫镜像、找无漏洞标签,还能自动提PR:
创建 .github/workflows/dependabot-docker.yml 文件:

name: Dependabot Docker漏洞扫描
on:
  schedule:
    - cron: "0 0 * * *" # 每天凌晨自动扫描
  workflow_dispatch: # 支持手动触发

jobs:
  dependabot-scan:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      - name: 初始化Dependabot
        uses: dependabot/fetch-metadata@v2
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
      - name: 运行Docker镜像扫描
        uses: dependabot/dependabot-core-action@v1
        with:
          package-ecosystem: "docker"
          directory: "/"
          github-token: ${{ secrets.GITHUB_TOKEN }}
          vulnerabilities: "critical,high"
  • 效果:扫描到无漏洞标签后会自动生成PR,PR里会附带漏洞修复说明,直接合并就能更新镜像标签。

2. Trivy Action扫描方案

用Trivy官方Action扫描,输出无漏洞标签清单:
创建 .github/workflows/trivy-docker-scan.yml 文件:

name: Trivy Docker漏洞扫描
on: [schedule, workflow_dispatch]

jobs:
  scan-tags:
    runs-on: ubuntu-latest
    steps:
      - name: 安装Skopeo和jq
        run: sudo apt-get install -y skopeo jq
      - name: 获取镜像所有标签
        id: get-tags
        run: echo "tags=$(skopeo list-tags docker://nginx | jq -r '.Tags[] | @csv')" >> $GITHUB_OUTPUT
      - name: 逐个扫描标签漏洞
        run: |
          IMAGE="nginx"
          touch scan-results.txt
          for TAG in ${{ steps.get-tags.outputs.tags }}; do
            TAG=$(echo $TAG | tr -d '"')
            VULN_DATA=$(trivy image --severity CRITICAL,HIGH --format json $IMAGE:$TAG)
            VULN_COUNT=$(echo $VULN_DATA | jq '.Results[].Vulnerabilities | length')
            if [ "$VULN_COUNT" -eq 0 ]; then
              echo "✅ $IMAGE:$TAG 无严重/高危漏洞" >> scan-results.txt
            else
              echo "❌ $IMAGE:$TAG 存在 $VULN_COUNT 个严重/高危漏洞" >> scan-results.txt
            fi
          done
      - name: 上传扫描结果
        uses: actions/upload-artifact@v4
        with:
          name: trivy-scan-results
          path: scan-results.txt
  • 可以扩展:如果需要自动发Issue通知,加个actions/github-script步骤调用GitHub API创建Issue即可。

常见问题排查(针对你之前的无效情况)

  • Dependabot没效果:检查配置文件里package-ecosystem是不是设成了docker,vulnerabilities选项有没有开启,私有镜像的认证环境变量有没有配置。
  • Skopeo拉不到标签:确认镜像仓库是否公开,私有仓库是否已登录,镜像URL格式是否正确(比如私有镜像要写docker://registry.example.com/your-image)。
  • Trivy扫描无结果:先跑trivy image --update更新漏洞库,确认镜像标签确实存在,检查漏洞等级参数是否正确。

内容的提问来源于stack exchange,提问作者Arun Krish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:27