Docker Image Scanning und Sicherheitsupdates in CI
AI generated
Docker · Image Scanning · Security · CI/CD · CVE
Docker Image Scanning und Sicherheitsupdates in CI
von Trivy und Grype bis SBOM und automatischen Updates

Ein Docker Image, das einmal gebaut und nie wieder auf Schwachstellen geprüft wurde, wird mit der Zeit zur Sicherheitslücke. Image Scanning in der CI-Pipeline und automatische Base-Image-Updates schließen dieses Fenster, bevor CVEs in die Produktion gelangen.

13 Min. Lesezeit Trivy · Grype · Snyk · SBOM · Renovate · GitHub Actions Docker Engine 26+ · OCI · CVSS 3.x

1. Warum Image Scanning in der CI unverzichtbar ist

Docker Image Scanning ist keine optionale Ergänzung zum Sicherheitskonzept – es ist ein notwendiger Bestandteil jeder CI-Pipeline, die Container-Images für den Produktionseinsatz baut. Der Grund: Selbst ein heute sicheres Base-Image enthält morgen bekannte Schwachstellen, sobald CVEs für Pakete veröffentlicht werden, die im Image installiert sind. Ein Image, das einmal gebaut und nie wieder geprüft wurde, akkumuliert mit der Zeit Sicherheitslücken, ohne dass irgendjemand eine Warnung bekommt.

Die Realität in vielen Teams: Images werden gebaut, deployt und über Monate oder Jahre nicht neu gebaut. Jede neue CVE-Publikation, die ein im Image enthaltenes Paket betrifft, bleibt unsichtbar. Docker Image Scanning in der CI-Pipeline macht diese Lücken sichtbar – spätestens beim nächsten Build, idealerweise auch als periodischer Scan laufender Images in der Registry. Wer beide Ebenen abdeckt (Build-Zeit und Registry), hat einen vollständigen Überblick über den Schwachstellen-Status seines Container-Stacks.

2. Scanning-Tools im Überblick: Trivy, Grype und Snyk

Trivy von Aqua Security ist das bekannteste Open-Source-Tool für Docker Image Scanning. Es kann OS-Pakete, Anwendungsabhängigkeiten (Python, Ruby, Node, PHP Composer, Java Maven), Konfigurationsdateien und IaC-Dateien scannen. Trivy nutzt die NVD- und OS-Vendor-Schwachstellendatenbanken und aktualisiert sie bei jedem Aufruf automatisch. Die Integration in GitHub Actions, GitLab CI und andere CI-Systeme ist gut dokumentiert und mit wenigen Zeilen YAML erledigt.

Grype von Anchore ist eine starke Alternative mit ähnlichem Funktionsumfang. Der Hauptvorteil von Grype ist die tiefere Integration mit Syft, dem dazugehörigen SBOM-Tool: Man generiert zuerst ein SBOM mit Syft und lässt dann Grype das SBOM auf Schwachstellen prüfen. Das trennt Scanning und Inventarisierung sauber. Snyk ist ein kommerzielles Produkt mit freiem Tier für kleine Teams – es bietet über das reine Docker Image Scanning hinaus auch Autofix-Vorschläge und eine Web-UI für das Management von Schwachstellen über mehrere Projekte hinweg.


# .github/workflows/docker-security.yml — Image scanning in GitHub Actions
name: Docker Image Security Scan

on:
  push:
    branches: [main, develop]
  schedule:
    # Scan weekly even without new pushes — catch newly published CVEs
    - cron: '0 6 * * 1'

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build Docker image
        run: docker build -t myapp:${ { github.sha } } .

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: myapp:${ { github.sha } }
          format: sarif
          output: trivy-results.sarif
          # Fail on HIGH and CRITICAL vulnerabilities
          severity: HIGH,CRITICAL
          # Ignore vulnerabilities without a fix (no point blocking on those)
          ignore-unfixed: true

      - name: Upload scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: trivy-results.sarif

3. Trivy in der CI-Pipeline integrieren

Trivy lässt sich als CLI-Tool, als Docker-Container oder als GitHub Action einsetzen. Für CI-Pipelines ist die GitHub Action der einfachste Einstieg; für komplexere Pipelines mit eigenem Runner eignet sich der Trivy-Container. Die wichtigste Entscheidung bei der Integration ist, an welcher Stelle im Build-Prozess das Scanning stattfindet: am besten direkt nach dem docker build-Schritt, bevor das Image in die Registry gepusht wird. So scheitert der Build, wenn kritische Schwachstellen gefunden werden, und kein unsicheres Image erreicht die Registry.

Das SARIF-Ausgabeformat von Trivy integriert sich nahtlos in GitHub Security, GitLab Security Dashboard und andere Plattformen, die SARIF verstehen. Damit werden Scan-Ergebnisse direkt im Pull-Request angezeigt und können ohne zusätzliche Tooling-Schicht von Entwicklern eingesehen werden. Für das lokale Docker Image Scanning ohne CI eignet sich trivy image imagename:tag – in wenigen Sekunden erscheint eine sortierte Tabelle mit allen gefundenen CVEs, Schweregrad, CVSS-Score und verfügbaren Fixes.

4. CVSS-Schwellenwerte und Ausnahmen definieren

Eine CI-Pipeline, die bei jedem CRITICAL-CVE den Build stoppt, wird schnell zum Hindernis, wenn ein kritisches CVE in einem transitiven Paket existiert, für das noch kein Fix verfügbar ist. Die Lösung: Differenzierte Schwellenwerte mit einer Ausnahme-Liste für CVEs, die bekannt sind, kein Fix vorhanden ist und für den konkreten Einsatzfall als akzeptables Risiko bewertet wurden. Trivy unterstützt eine .trivyignore-Datei im Projektverzeichnis, in der CVE-IDs eingetragen werden können, die beim Scan ignoriert werden sollen.

Eine sinnvolle Eskalationsstrategie für Docker Image Scanning in der CI: CRITICAL-CVEs mit verfügbarem Fix blockieren den Build. HIGH-CVEs ohne Fix erzeugen eine Warnung, blockieren aber nicht. MEDIUM und LOW werden dokumentiert, aber weder blockiert noch gewarnt. Diese Strategie verhindert, dass Builds wegen nicht behebbarer Schwachstellen dauerhaft blockiert werden, ohne dass echte Risiken unsichtbar bleiben. Die Ausnahme-Liste muss regelmäßig geprüft werden: sobald ein Fix für ein ignoriertes CVE verfügbar ist, muss der Eintrag aus der Ausnahme-Liste entfernt werden.


# .trivyignore — Document each exception with reason and review date
# Format: CVE-ID [optional comment]

# CVE-2024-12345: libssl vulnerability, no fix available for alpine 3.19 base
# Review by: 2026-06-01
CVE-2024-12345

# CVE-2024-67890: zlib integer overflow, only exploitable via crafted ZIP files
# Our application does not process untrusted ZIP files (reviewed 2026-04-15)
CVE-2024-67890

---

# trivy.yaml — Project-level Trivy configuration
severity:
  - CRITICAL
  - HIGH

# Only fail on vulnerabilities that have a fix
ignore-unfixed: true

# Skip development dependencies (they don't end up in production images)
skip-dirs:
  - node_modules/.bin
  - vendor/bin

# Output formats for different purposes
format: table   # Human-readable for local use

# Scan timeout — useful for large images with many packages
timeout: 10m0s

5. SBOM generieren und auswerten

Ein SBOM (Software Bill of Materials) ist ein vollständiges Inventar aller im Image enthaltenen Pakete, Bibliotheken und Abhängigkeiten – vergleichbar mit einem Lieferschein für Software. Docker Image Scanning und SBOM-Generierung ergänzen sich: Der Scan identifiziert aktuelle Schwachstellen, das SBOM ermöglicht es, neue CVEs zu einem beliebigen späteren Zeitpunkt gegen ein bereits existierendes Image zu prüfen, ohne das Image erneut zu bauen. Das ist besonders wertvoll, wenn ein kritischer CVE für ein Paket veröffentlicht wird und geprüft werden muss, welche der laufenden Images betroffen sind.

Das SBOM-Format SPDX und CycloneDX sind die relevanten Standards. Trivy kann SBOMs in beiden Formaten generieren. Syft von Anchore ist ein dediziertes SBOM-Tool, das tiefer in die Paketstruktur des Images einsteigt und als Ergänzung zu Trivy verwendet werden kann. SBOMs werden idealerweise zusammen mit dem Image in der Registry gespeichert – entweder als OCI-Artifact oder als separate Datei. Das ermöglicht spätere Analysen ohne Zugriff auf das Build-System und ist in manchen Compliance-Frameworks bereits als Anforderung formuliert.

6. Base-Images aktuell halten

Die meisten CVEs in Docker Images kommen aus dem Base-Image, nicht aus der eigenen Anwendung. Der schnellste Weg, den CVE-Count zu reduzieren, ist ein aktuelles Base-Image. php:8.4-fpm-alpine hat deutlich weniger installierte Pakete – und damit deutlich weniger Angriffsfläche – als php:8.4-fpm auf Debian-Basis. Alpine-Images sind bei aktiven CVE-Programmen gut gepflegt und werden bei kritischen Schwachstellen schneller aktualisiert als viele andere Distributions-Images.

Base-Images sollten niemals mit einem festen SHA-Digest im Dockerfile pinnen, ohne einen Prozess zu haben, der diese Digest-Pins regelmäßig aktualisiert. Ein gepinntes Digest-Image sieht nach mehr Kontrolle aus, ist aber ein statisches Ziel: Neue Sicherheitsupdates kommen nicht automatisch rein. Das richtige Muster ist: Tag ohne SHA im Dockerfile + automatischer Update-Prozess über Renovate oder Dependabot, der den Tag beim Erscheinen neuer Images automatisch aktualisiert und einen Pull-Request erstellt.

7. Renovate für automatische Dockerfile-Updates

Renovate ist ein Open-Source-Dependency-Update-Bot, der Dockerfiles, Compose-Dateien, GitHub Actions und viele andere Konfigurationsformate auf veraltete Versionen prüft und automatisch Pull Requests mit Updates erstellt. Für Docker Image Scanning-Workflows ist Renovate der ideale Ergänzung: Während der Scan die aktuellen Schwachstellen aufzeigt, sorgt Renovate dafür, dass Base-Images und Abhängigkeiten aktuell bleiben und neue Patches automatisch in einen Review-Prozess einfließen.

Renovate erkennt Versionsmuster in Dockerfiles automatisch: FROM php:8.4-fpm-alpine wird als versionierter Dependency erkannt und Renovate prüft, ob eine neuere Alpine-Version verfügbar ist. Die Konfiguration in renovate.json ermöglicht es, Automerge für Patch-Updates zu aktivieren (damit minimale Updates automatisch übernommen werden, ohne manuellen Review), während Minor- und Major-Updates immer einen manuellen Review erfordern. Damit reduziert sich der manuelle Aufwand für Security-Updates erheblich, ohne die Kontrolle über bedeutende Versionssprünge aufzugeben.


# renovate.json — Automated Dockerfile and Docker Compose updates
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:best-practices"],
  "docker": {
    "enabled": true
  },
  "packageRules": [
    {
      "matchManagers": ["dockerfile", "docker-compose"],
      "matchUpdateTypes": ["patch"],
      "automerge": true,
      "automergeType": "pr",
      "addLabels": ["security", "auto-merge"]
    },
    {
      "matchManagers": ["dockerfile", "docker-compose"],
      "matchUpdateTypes": ["minor", "major"],
      "reviewers": ["team:platform"],
      "addLabels": ["security", "needs-review"]
    }
  ],
  "schedule": ["every weekend"],
  "prConcurrentLimit": 5
}

# Test Renovate configuration locally:
# npx renovate --token $GITHUB_TOKEN --dry-run=lookup owner/repo

8. Dockerfile-Härtung als erste Sicherheitslinie

Neben dem reaktiven Docker Image Scanning gibt es proaktive Maßnahmen im Dockerfile selbst, die die Angriffsfläche von Anfang an reduzieren. Der wichtigste Schritt: Container sollten nie als root-Benutzer laufen. Ein dedizierter Nicht-Root-Benutzer im Dockerfile verhindert, dass ein kompromittierter Container-Prozess direkt auf Host-Ressourcen zugreifen kann, falls eine Container-Escape-Schwachstelle ausgenutzt wird. Das USER-Statement im Dockerfile kombiniert mit dem korrekten Setzen von Dateiberechtigungen ist in wenigen Zeilen umgesetzt.

Weitere Maßnahmen: Distroless-Images oder Alpine-Minimalimages reduzieren die Anzahl installierter Pakete und damit die Scanning-Fläche drastisch. Multi-Stage-Builds stellen sicher, dass Build-Tools (Compiler, Package-Manager, Dev-Dependencies) nicht in das finale Produktions-Image gelangen. Das COPY --chown-Flag setzt Dateiberechtigungen beim Kopieren direkt korrekt, statt später RUN chown ausführen zu müssen – das spart einen Layer und ist klarer in der Intention. Zusammen mit regelmäßigem Docker Image Scanning in der CI bildet Dockerfile-Härtung eine mehrschichtige Sicherheitsstrategie.

9. Scanning-Tools im Vergleich

Die Wahl des richtigen Docker Image Scanning-Tools hängt von Anforderungen ab. Alle drei führenden Tools scannen OS-Pakete und Anwendungsabhängigkeiten, unterscheiden sich aber in Lizenz, Integrationstiefe und Zusatzfunktionen.

Tool Lizenz SBOM Besonderheit
Trivy Apache 2.0 SPDX, CycloneDX Scannt auch IaC, K8s, Git-Repos
Grype Apache 2.0 via Syft Tiefe Syft-Integration, Policy-as-Code
Snyk Kommerziell (Free Tier) CycloneDX Autofix-Vorschläge, Web-UI, PR-Integration
Docker Scout Kommerziell (integriert) Ja Native Docker Desktop/Hub-Integration
Clair Apache 2.0 Nein Harbor-Integration, API-first-Design

Für die meisten Teams ist Trivy die erste Wahl: Open Source, aktiv gepflegt, umfangreicher Scan-Umfang und hervorragende CI-Integration. Grype ist eine gleichwertige Alternative, wenn Syft bereits für SBOM-Generierung eingesetzt wird. Snyk lohnt sich, wenn das Team bereit ist, für Autofix-Vorschläge und zentrale Schwachstellen-Verwaltung zu bezahlen. Docker Scout ist für Teams attraktiv, die bereits Docker Hub und Docker Desktop intensiv nutzen und eine nahtlose Integration ohne zusätzliche Tools bevorzugen.

Mironsoft

Container-Sicherheit, CI/CD-Integration und Security-Automatisierung

Docker Image Scanning noch nicht in eurer CI-Pipeline?

Wir integrieren Trivy oder Grype in eure CI-Pipeline, definieren CVSS-Schwellenwerte, richten Renovate für automatische Base-Image-Updates ein und sorgen für einen vollständigen SBOM-Prozess.

CI-Integration

Trivy in GitHub Actions oder GitLab CI integrieren und SARIF-Reports konfigurieren

SBOM-Prozess

SPDX- oder CycloneDX-SBOMs generieren und in der Registry zusammen mit Images speichern

Auto-Updates

Renovate für Dockerfile-Updates konfigurieren und Automerge für Patch-Updates einrichten

10. Zusammenfassung

Docker Image Scanning in der CI-Pipeline ist der Mechanismus, der verhindert, dass bekannte Schwachstellen unbemerkt in die Produktion gelangen. Trivy ist das empfohlene Tool für die meisten Teams: Open Source, einfach zu integrieren, umfangreicher Scan-Umfang inklusive SBOM-Generierung. CVSS-Schwellenwerte und eine gepflegte Ausnahme-Liste verhindern, dass der Build dauerhaft wegen nicht behebbarer Schwachstellen blockiert wird. Renovate ergänzt das Scanning mit proaktiven Updates: statt nur Schwachstellen zu melden, aktualisiert es Base-Images automatisch.

Die vollständige Strategie kombiniert reaktives Scanning (CVEs in bestehenden Images finden), proaktive Härtung (Distroless-Images, Nicht-Root-Benutzer, minimale Pakete) und automatische Updates (Renovate für Base-Images und Abhängigkeiten). SBOM-Generierung als Teil des Build-Prozesses sorgt dafür, dass neu veröffentlichte CVEs auch gegen bereits deployete Images geprüft werden können, ohne sie neu bauen zu müssen. Zusammen bilden diese drei Bausteine eine mehrschichtige Container-Sicherheitsstrategie, die mit dem Stand der Bedrohungslandschaft Schritt hält.

Docker Image Scanning und Sicherheitsupdates — Das Wichtigste auf einen Blick

Tool-Empfehlung

Trivy für die meisten Teams: Open Source, einfache CI-Integration, SBOM-Generierung und breiter Scan-Umfang inklusive IaC.

Schwellenwerte

CRITICAL mit Fix blockiert den Build. HIGH ohne Fix als Warnung. .trivyignore für bekannte, nicht behebbare CVEs mit Begründung und Review-Datum.

SBOM

SPDX oder CycloneDX zusammen mit dem Image in der Registry speichern. Ermöglicht spätere Prüfung ohne Rebuild.

Auto-Updates

Renovate für Dockerfile-Updates einrichten. Automerge für Patch-Updates, manueller Review für Minor und Major.

11. FAQ: Docker Image Scanning und Sicherheitsupdates in CI

1Was ist Docker Image Scanning?
Analyse eines Container-Images auf bekannte CVEs in OS-Paketen und Anwendungsabhängigkeiten. Tools vergleichen gefundene Pakete mit NVD und OS-Vendor-Advisories.
2Wann in der CI-Pipeline scannen?
Direkt nach docker build, vor dem Registry-Push. Zusätzlich wöchentliche Registry-Scans für neu veröffentlichte CVEs gegen bereits gepushte Images.
3Was ist Trivy?
Open-Source-Vulnerability-Scanner von Aqua Security. Scannt Images, IaC, K8s und Git-Repos. In GitHub Actions via aquasecurity/trivy-action einfach integrierbar.
4Was ist ein SBOM?
Software Bill of Materials – vollständiges Paket-Inventar. Ermöglicht spätere CVE-Prüfung gegen deployete Images ohne Rebuild. Wichtig für Compliance und Incident Response.
5Build durch unfixable CVEs blockiert?
ignore-unfixed: true in Trivy-Konfiguration. Bekannte, nicht behebbare CVEs in .trivyignore mit Begründung und Review-Datum eintragen.
6Base-Images automatisch aktuell halten?
Renovate oder Dependabot prüfen Dockerfiles und erstellen automatisch PRs. Automerge für Patch-Updates reduziert manuellen Aufwand.
7Welche Base-Images haben wenig CVEs?
Alpine-Images (php:8.4-fpm-alpine) und Distroless-Images von Google. Distroless enthält keine Shell, keinen Package-Manager – minimale Angriffsfläche.
8Trivy vs. Grype?
Beide Open Source, beide scannen OS-Pakete und App-Abhängigkeiten. Trivy scannt zusätzlich IaC und K8s. Grype integriert tiefer mit Syft für SBOM. Für die meisten Teams gleichwertig.
9Scan-Ergebnisse im GitHub PR anzeigen?
Trivy mit format: sarif ausführen, dann github/codeql-action/upload-sarif verwenden. Ergebnisse erscheinen im Security-Tab und als PR-Annotationen.
10Root oder Nicht-Root im Container?
Immer Nicht-Root. USER im Dockerfile verhindert Host-Zugriff mit Root-Rechten bei Container-Escape. Die meisten offiziellen Images bieten bereits Nicht-Root-Benutzer an.