Docker-Image-Sicherheitsscans und Behebung: Trivy-Praxis-Tutorial und CI/CD-Integrationsleitfaden

Am 10. Dezember 2021 schoss die Alarmkurve auf dem Monitoring-Dashboard plötzlich nach oben. In der Ops-Gruppe flog eine CVE-Nummer: CVE-2021-44228 – die später die gesamte Tech-Szene erschütternde Log4Shell-Schwachstelle. Dutzende Microservices nutzten Basis-Images mit dieser Lücke; das Team arbeitete die Nacht durch, Images zu aktualisieren und neu zu deployen.
Bei der Nachbesprechung fragte der Chef: „Wie konnten wir nicht einmal wissen, welche Schwachstellen in unseren Images stecken?“
Eine NSFOCUS-Studie zeigt: 76 % der Images auf Docker Hub enthalten bekannte Sicherheitslücken. Ihr python:3.9-Image? nginx:latest? Wahrscheinlich stecken Dutzende CVEs darin.
Sie fragen sich vermutlich: Wie finde ich Schwachstellen in Images? Wie behebe ich sie? Wie erkenne ich sie automatisch in CI/CD, bevor ein unsicheres Image in Produktion landet?
Diese Fragen habe ich in zwei Jahren Produktionsbetrieb durch Trial and Error beantwortet. In diesem Artikel zeige ich Ihnen Schritt für Schritt:
- Schnelle Docker-Image-Scans mit Trivy und ähnlichen Tools
- Systematische Behebung (mehr als nur „Image-Version aktualisieren“)
- Automatisierte Scans in GitHub Actions, GitLab CI und anderen CI/CD-Plattformen
Alle Befehle und Konfigurationen sind direkt kopierbar. Nach dem Lesen sparen Sie sich viele Umwege.
"Laut NSFOCUS-Bericht vom März 2018 wiesen bei zufällig geprüften Docker-Hub-Images mehr als drei Viertel (76 %) bekannte Sicherheitslücken auf."
Docker-Image-Sicherheitsbedrohungen im Überblick
Welche Sicherheitsprobleme können Docker-Images haben?
Ehrlich gesagt dachte ich anfangs, ein Docker-Image sei einfach ein „verpacktes Programm“ – Hauptsache, es läuft. Erst als wir online drei Tage lang gescannt wurden, wurde klar: Schwachstellen in Images fallen in mehrere Kategorien – jede kann schmerzhaft werden.
OS-Paket-Schwachstellen – am häufigsten. In Alpine-, Ubuntu-Basis-Images stecken OpenSSL, glibc, curl und andere Systembibliotheken, die regelmäßig neue Lücken bekommen. Die OpenSSL-3.0.x-Hochrisiko-Schwachstelle 2022 betraf eine große Anzahl Images.
Anwendungsabhängigkeiten – subtiler. Ihr Python-Projekt hängt von Flask ab, Flask von Werkzeug – und eine Werkzeug-Version hat eine Code-Execution-Lücke. Python aktualisiert? Nicht sicher: Schwachstellen tief in der Abhängigkeitskette bleiben unbemerkt. Log4j ist das klassische Beispiel – wie viele Java-Projekte wussten nicht, dass sie Log4j nutzen.
Fehlkonfiguration und Secret-Leaks – manche Entwickler schreiben DB-Passwörter ins Dockerfile, vergessen .git beim Packen oder lassen Container als root laufen – mit mehr Rechten als nötig.
Supply-Chain-Risiken – am schwersten abzuwehren. Ein scheinbar normales Image von Docker Hub kann Mining-Software oder Backdoors enthalten. Eine Studie 2018 fand gezielt täuschende bösartige Images für unvorsichtige Pull-Nutzer.
Warum Docker-Hub-Images nicht blind vertrauen?
Die 76-%-Zahl hat mich beim ersten Lesen schockiert.
„Die Daten sind alt“, denken Sie vielleicht – stimmt, aber alte Images werden noch genutzt. Viele „offiziellen“ Images werden nicht live aktualisiert. python:3.9 kann vor sechs Monaten gebaut sein, Systempakete veraltet.
Schlimmer: Qualität auf Docker Hub ist uneinheitlich. Privat gepflegte Images monatelang ohne Update; „offiziell“ nur im Namen. Kein einheitlicher Audit-Standard – Vertrauen ist Glückssache.
Ein Kollege zog ein Node.js-Image von Docker Hub – später 30+ HIGH-Schwachstellen. Antwort des Maintainers: „Zwei Jahre keine Wartung, fixen Sie es selbst.“
Mein Prinzip heute: Jedes Image von Docker Hub vor Nutzung scannen – auch mit „offiziellem“ Tag.
Vergleich und Auswahl gängiger Scan-Tools
Trivy: meine Open-Source-Empfehlung
Es gibt viele Scanner – ich nutze fast nur noch Trivy. Nicht weil andere schlecht sind, sondern weil Trivy Usability und Funktionsumfang bestens balanciert.
Beim ersten Scan war ich von der Geschwindigkeit überrascht: ein mehrhundert-MB-Image in ca. 10 Sekunden beim ersten Mal, danach nur Sekunden. Keine lokale DB-Pflege, kein Extra-Service – installieren und loslegen.
Was Trivy erkennt – mehr als erwartet:
- Schwachstellenscan: OS-Pakete (Alpine, Ubuntu, Debian, CentOS usw.) und Abhängigkeiten (npm, pip, Maven, Go Modules usw.)
- Fehlkonfiguration: Dockerfile, Kubernetes-Manifeste
- Secret-Leaks: versehentlich gepackte Keys und Passwörter
- Lizenz-Compliance: Open-Source-Lizenzen der Abhängigkeiten
Trivy ist in GitHub Actions, Harbor und anderen Plattformen integiert – weniger Eigenbau nötig.
Andere Tools kurz vorgestellt
Snyk – kommerziell, umfassend. IDE-Integration mit Echtzeit-Hinweisen, automatische Fix-PRs. Kostenlose Version limitiert; für Unternehmen mit Budget.
Clair – Scan-Engine von Quay, Open Source, stark anpassbar. Konfiguration aufwendig; CVE-Daten von Linux-Distributionen. Für Teams mit Security Engineers – für normale Dev-Teams hoher Lernaufwand.
Anchore – Enterprise mit Policy-Management, z. B. „CRITICAL blockiert Deployment“. Für Finanz, Gesundheitswesen, strenge Compliance – aber schwer in Wartung.
Docker Scout / Hardened Images (DHI) – Docker-Offensive Mai 2025, nahezu null CVEs, 95 % kleinere Images. Distroless-Runtime, vielversprechend – Ökosystem noch im Aufbau.
Meine Empfehlung
Kleine Teams / Einzelentwickler → Trivy: kostenlos, einfach, ausreichend. Eine Install-Zeile, ein Scan-Befehl, 10 Minuten Einstieg.
Große Unternehmen, hohe Compliance, Budget → Snyk: aktuelle DB, professioneller Support, tiefe Tool-Integration.
Dedizierte Security Engineers, anpassbare Open-Source-Lösung → Clair – mit Zeit für Konfiguration einplanen.
Maximale Sicherheit, minimale Images → Docker Hardened Images im Blick behalten – möglicher Standard der Zukunft.
Meine Praxis: Trivy für Dev und CI/CD (schnelles Feedback); vor Produktion zusätzlich Harbor/Clair als zweite Prüfung.
Trivy-Praxis-Tutorial
Installation und Grundlagen
Trivy installieren ist erstaunlich einfach. Unter macOS:
brew install trivy
Unter Linux: Binärdatei oder Paketmanager – Details auf https://github.com/aquasecurity/trivy/releases
Direkt ein Image scannen:
# Docker-Hub-Image
trivy image python:3.9
# Lokal gebautes Image
trivy image myapp:latest
# Als tar gespeichertes Image
trivy image --input ruby-3.1.tar
Beim ersten Lauf lädt Trivy die Schwachstellendatenbank (trivy-db, ca. einige Dutzend MB). Danach geht es deutlich schneller.
Ergebnisse nach Schweregrad:
- CRITICAL: sofort beheben, vollständige Übernahme möglich
- HIGH: schnell beheben, ausnutzbar für Angriffe
- MEDIUM: Behebung empfohlen
- LOW: niedrigere Priorität, einplanen
Pro Schwachstelle: CVE-ID, betroffenes Paket, aktuelle und Fix-Version (falls vorhanden).
Erweiterte Scan-Optionen
In der Praxis will man nicht jede LOW-Schwachstelle sehen – besonders ungepatchte. Dafür gibt es Optionen:
Nur HIGH und CRITICAL:
trivy image --severity HIGH,CRITICAL nginx:latest
In CI/CD Standard – nicht alles muss sofort weg, HIGH/CRITICAL zuerst.
Ungepatchte ignorieren:
trivy image --ignore-unfixed redis:latest
Kein Patch verfügbar? Nur behebbare Schwachstellen anzeigen.
Exit-Code bei CRITICAL:
trivy image --exit-code 1 --severity CRITICAL myapp:latest
In CI/CD: CRITICAL → Build schlägt fehl, unsicheres Image kommt nicht in Produktion.
JSON für weitere Tools:
trivy image -f json -o results.json myapp:latest
Für Security-Plattformen oder Automatisierung.
Offline-Scan:
trivy image --skip-db-update myapp:latest
In isolierten Netzen: DB extern laden, kopieren, mit --skip-db-update scannen.
Scan-Ergebnisse richtig lesen
Beim ersten Produktions-Scan: 100+ Schwachstellen – Panik. Mit Erfahrung wird die Priorisierung klarer:
Zuerst Schwachstellen mit Fix-Version. Fixed Version = none/leer → noch kein Patch, wenig handelbar.
CRITICAL und HIGH priorisieren. LOW/MEDIUM bei internen Diensten können warten; CRITICAL oft mit öffentlichem Exploit.
CVE-Details prüfen unter https://cve.mitre.org – manche „schlimme“ CVEs brauchen extreme Bedingungen.
Trivy-Prinzip: JSON-Schwachstellendatenbank + Paketliste aus dem Image abgleichen. Paket + Version match → Alarm. Fehlalarme möglich, wenn betroffene Funktion im Code nie genutzt wird – Risiko im Kontext bewerten.
Systematische Schwachstellenbehebung
Mit dem richtigen Basis-Image starten
Oft heißt es nicht „patchen“, sondern „wechseln“. Dutzende OS-Paket-Lücken? Sichereres Basis-Image statt Einzel-Upgrades.
Früher nutzten wir Alpine (5,87 MB, klein). Aber musl statt glibc – Kompatibilitätsprobleme; klein heißt nicht sicher.
Heute bevorzuge ich Distroless: 3,06 MB, kleiner als Alpine, extrem reduziert – keine Shell, kein Paketmanager, keine unnötigen Tools.
Warum sicherer? Selbst bei App-Schwachstelle: kein Shell-Zugriff im Container – minimaler Angriffsvektor.
Google Distroless für verschiedene Sprachen:
# Python
FROM gcr.io/distroless/python3
# Node.js
FROM gcr.io/distroless/nodejs
# Go (statisch kompiliert)
FROM gcr.io/distroless/static
Nachteil: Debugging schwierig ohne ls/cat. Dev mit normalem Image, Produktion mit Distroless.
Docker Hardened Images (DHI) 2025: nahezu null CVEs, 95 % kleiner – Ökosystem noch jung, aber beobachtenswert.
Abhängigkeiten upgraden – Praxis
Basis-Image allein reicht nicht – Anwendungsschicht mitdenken:
Methode 1: Basis-Image-Version
# Nicht latest – zu ungenau
FROM python:3.9
# Konkrete Version, regelmäßig aktualisieren
FROM python:3.11.7
latest kann monatelang ohne System-Updates stehen. Konkrete Tags, monatlich Minor-Updates prüfen.
Methode 2: Systempakete im Dockerfile
FROM ubuntu:22.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
update/upgrade/clean in einem RUN – weniger Layer; apt-Cache löschen spart Speicher.
Methode 3: Anwendungsabhängigkeiten
Trivy meldet Flask-Schwachstelle → requirements.txt anpassen:
# Vorher
Flask==2.0.1
# Nachher (2.3.0 behebt die Lücke)
Flask==2.3.0
Vorsicht: Major-Sprünge können Breaking Changes bringen – erst in Test, dann Produktion. Sicherer: Patch-Level innerhalb 2.0.x statt Sprung auf 2.3.0.
Best Practices nicht vergessen
Multi-Stage-Build:
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM gcr.io/distroless/static
COPY --from=builder /app/myapp /
CMD ["/myapp"]
Finales Image ohne Compiler, Quellcode, Zwischendateien – kleinerer Angriffsvektor.
Nicht als root:
RUN useradd -m myuser
USER myuser
Root im Container = volle Rechte nach Kompromittierung. Normaler User reduziert Schaden.
Regelmäßig neu bauen:
Code unverändert, aber OS-Patches kommen laufend. Mindestens monatlich rebuild – wir automatisieren sonntags wöchentlich, Montag Review.
.dockerignore:
.git
.env
*.log
secrets/
.env im Image = Passwort-Leak. Wie .gitignore für den Build-Kontext.
Nie latest:
FROM python:latest ist eine Zeitbombe – unbekannte Version, unbekannte Lücken. FROM python:3.11.7-slim ist nachvollziehbar.
Automatisierter Security-Scan in CI/CD
GitHub Actions – in wenigen Minuten
Manuelles Scannen vergisst man. CI/CD bei jedem Commit/Build ist zuverlässiger.
.github/workflows/docker-scan.yml:
name: Docker Security Scan
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- 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: 'table'
severity: 'CRITICAL,HIGH'
exit-code: '1' # Build schlägt bei schweren Schwachstellen fehl
- name: Upload scan results
if: always()
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
Was passiert?
- Trigger bei push/PR auf main/develop
- Image-Build mit Commit-SHA als Tag
- Trivy prüft CRITICAL/HIGH
exit-code: '1'blockiert Merge bei Fund- Ergebnisse unter GitHub Security
Nach erstem Push: roter Build bei Schwachstellen – automatisches Sicherheitsgate.
GitLab CI/CD – ebenso einfach
.gitlab-ci.yml:
stages:
- build
- test
- security
build_image:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
security_scan:
stage: security
image: aquasec/trivy:latest
script:
- trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
allow_failure: false
dependencies:
- build_image
allow_failure: false – fehlgeschlagener Scan stoppt die Pipeline. Dev kann lockerer sein; Produktion: false.
Harbor als zweite Absicherung
Harbor (ab v1.2 mit Trivy/Clair) scannt gepushte Images automatisch:
- Scan beim Push
- Täglicher Vollscan (neue CVEs)
- Schwellenwerte: CRITICAL blockiert Pull
Unser Ablauf:
- Dev-Push → Trivy-Scan
- HIGH+ → Tag „Schwachstelle vorhanden“
- Prod-K8s: admission webhook lehnt solche Images ab
Selbst CI-Umgehung wird am Repository abgefangen.
Empfohlener Gesamt-Workflow
Entwicklung: IDE-Plugin (Snyk/Trivy), nach lokalem Build trivy image
Build: GitHub Actions / GitLab CI, CRITICAL → Fehlschlag, Dashboard für Trends
Repository: Harbor-Nachscan, Pull-Block bei hohem Risiko
Laufzeit: wöchentlicher Prod-Scan, Alarm bei neuen CVEs
Review: monatliche Behebungs-Review, Schwellenwerte anpassen
Einmal eingerichtet läuft es automatisch – bei uns ca. ein Sprint (zwei Wochen) bis stabil. Seitdem schlafe ich ruhiger: kein plötzlicher CVE-Schock aus veralteten Images.
Fazit
Zurück zu Log4Shell: Mit diesem Workflow wäre die Lücke in CI/CD aufgefallen – nicht mitten in der Nacht in Produktion, nicht mit der Frage des Chefs im Nacken.
Docker-Image-Sicherheit ist kein Hexenwerk – drei Säulen:
- Trivy & Co. zum Scannen (einfach, schnell, ausreichend)
- Systematische Behebung (sicheres Basis-Image, Upgrades, Best Practices)
- CI/CD-Automatisierung (GitHub Actions / GitLab CI in Minuten)
76 % unsicherer Docker-Hub-Images klingt erschreckend – bedeutet aber: Die meisten Teams ignorieren es noch. Wer jetzt startet, ist besser als 76 % der anderen.
Nicht alles auf einmal fixen – unrealistisch. Schrittweise:
- Heute: Trivy installieren, Projekt-Image scannen
- Diese Woche: CRITICAL beheben – oft nur Basis-Image-Update
- Nächster Sprint: Trivy in CI/CD, CRITICAL blockiert Deployment
- Diesen Monat: Security-Baseline, regelmäßige Reviews
Container-Sicherheit ist ein Prozess, kein Einmalprojekt. Mit etabliertem Workflow: wöchentlicher Auto-Scan, im Weekly 30 Minuten – fertig.
Noch einmal: Produktions-Images scannen. Docker-Hub-Images scannen. Nicht erst nach dem Vorfall.
Teilen Sie gern Erfahrungen und Pitfalls in den Kommentaren – gemeinsam sicherer containerisieren.
Vollständiger Workflow für Docker-Image-Sicherheitsscans und Behebung
Vom Trivy-Setup bis zur CI/CD-Integration – Scans, Behebung und Automatisierung Schritt für Schritt
⏱️ Estimated time: 2 hr
- 1
Step 1: Trivy installieren
Trivy installieren:
• macOS: brew install trivy
• Linux: Binärdatei von GitHub Releases oder Paketmanager
• Download: https://github.com/aquasecurity/trivy/releases
• Beim ersten Start wird automatisch die Schwachstellendatenbank (trivy-db, ca. einige Dutzend MB) heruntergeladen - 2
Step 2: Grundlegende Image-Schwachstellenscans
Grundlegende Image-Schwachstellenscans:
• Docker-Hub-Image scannen: trivy image python:3.9
• Lokales Image scannen: trivy image myapp:latest
• Tar-Datei scannen: trivy image --input ruby-3.1.tar
Ergebnisse nach Schweregrad:
• CRITICAL (sofort beheben)
• HIGH (schnellstmöglich beheben)
• MEDIUM (Behebung empfohlen)
• LOW (eingeplant bearbeiten) - 3
Step 3: Erweiterte Scan-Optionen konfigurieren
Erweiterte Scan-Optionen:
• Nur HIGH und CRITICAL anzeigen: trivy image --severity HIGH,CRITICAL nginx:latest
• Ungepatchte Schwachstellen ignorieren: trivy image --ignore-unfixed redis:latest
• Exit-Code ungleich null bei CRITICAL (für CI/CD):
trivy image --exit-code 1 --severity CRITICAL myapp:latest
• JSON-Ausgabe: trivy image -f json -o results.json myapp:latest - 4
Step 4: Schwachstellen systematisch beheben
Schwachstellen systematisch beheben:
Sicheres Basis-Image wählen:
• Distroless-Images (gcr.io/distroless/python3/nodejs/static, nur 3,06 MB, ohne Shell und Paketmanager)
• Oder Docker Hardened Images 2025 (nahezu null CVEs)
Basis-Image-Version aktualisieren:
• Konkrete Versionsnummer (python:3.11.7), nicht latest
Systempakete im Dockerfile upgraden:
• RUN apt-get update && apt-get upgrade -y && apt-get clean && rm -rf /var/lib/apt/lists/*
Anwendungsabhängigkeiten aktualisieren:
• requirements.txt usw. anpassen, Patch-Versionen bevorzugen - 5
Step 5: Automatisierte Scans in GitHub Actions
Datei .github/workflows/docker-scan.yml erstellen:
• Trigger bei push/pull_request
• Docker-Image bauen
• aquasecurity/trivy-action zum Scannen
• severity: 'CRITICAL,HIGH' und exit-code: '1' (Build schlägt bei schweren Schwachstellen fehl)
• Scan-Ergebnisse auf GitHub Security hochladen - 6
Step 6: GitLab CI/CD-Integration
.gitlab-ci.yml erstellen oder anpassen:
• Stages: build, test, security
• Security-Stage mit aquasec/trivy:latest
• trivy image --exit-code 1 --severity HIGH,CRITICAL ausführen
• allow_failure: false (fehlgeschlagener Security-Scan stoppt die Pipeline) - 7
Step 7: Vollständigen Sicherheits-Scan-Workflow etablieren
Entwicklungsphase:
• Snyk/Trivy-Plugin in der IDE
• Nach lokalem Build manuell scannen
Build-Phase:
• Automatischer CI/CD-Scan
• CRITICAL führt sofort zum Fehlschlag und blockiert Merge
• Ergebnisse ins Security Dashboard
Repository-Phase:
• Harbor o. Ä. für Nachscan
• Schwachstellen-Richtlinien blockieren Pulls bei hohem Risiko
Laufzeit:
• Produktions-Images wöchentlich scannen
• Alarm bei neuen Schwachstellen
Regelmäßige Reviews:
• Monatliche Überprüfung der Behebungen
• Scan-Strategie und Schwellenwerte aktualisieren
FAQ
Welche Sicherheitsprobleme können Docker-Images haben?
1) OS-Paket-Schwachstellen:
• OpenSSL, glibc, curl usw. in Alpine-, Ubuntu-Basis-Images
• z. B. OpenSSL-3.0.x-Hochrisiko-Schwachstelle 2022
2) Anwendungsabhängigkeiten:
• Schwachstellen tief in der Abhängigkeitskette, z. B. Log4j
• Viele Java-Projekte wussten nicht einmal, dass sie Log4j nutzen
3) Fehlkonfiguration und Secret-Leaks:
• DB-Passwort im Dockerfile
• .git-Verzeichnis nicht entfernt
• Container als root ausgeführt
4) Supply-Chain-Risiken:
• Bösartige Images auf Docker Hub
• Studie 2018: gezielt täuschende bösartige Images
Warum Docker-Hub-Images nicht blind vertrauen? Stimmt die 76-%-Zahl?
Die Daten sind etwas älter, aber alte Images werden noch genutzt. Viele „offizielle“ Images werden nicht in Echtzeit aktualisiert – python:3.9 kann vor sechs Monaten gebaut sein, Systempakete veraltet.
Qualität auf Docker Hub ist uneinheitlich:
• Privat gepflegt, teils monatelang ohne Update
• „Offiziell“ nur im Namen, hochgeladen von einzelnen Unternehmen
• Kein einheitlicher Sicherheitsaudit-Standard
Prinzip: Jedes Image von Docker Hub vor der Nutzung scannen – auch mit „offiziellem“ Tag.
Worin unterscheiden sich Trivy, Snyk, Clair und Anchore? Welches Tool wählen?
• Empfohlenes Open-Source-Tool, kostenlos und ausreichend
• Einfache Installation (brew install trivy)
• Schnelle Scans (ca. 10 s beim ersten Mal, danach Sekunden)
• Schwachstellen, Fehlkonfiguration, Secret-Leaks, Lizenz-Compliance
• Integration in GitHub Actions, Harbor
• In 10 Minuten startklar – ideal für kleine Teams oder Einzelentwickler
Snyk:
• Kommerziell, umfassend
• IDE-Integration mit Echtzeit-Hinweisen
• Automatische Fix-PRs
• Kostenlose Version stark limitiert – für große Unternehmen mit Budget
Clair:
• Scan-Engine von Quay, Open Source, stark anpassbar
• Komplexe Konfiguration, hoher Lernaufwand
• Für Teams mit dedizierten Security Engineers
Anchore:
• Enterprise-Lösung mit Policy-Management
• Für stark regulierte Branchen wie Finanz und Gesundheitswesen
Empfehlung: Kleine Teams → Trivy; große Unternehmen → Snyk; Teams mit Security Engineers → Clair.
Wie liest man Trivy-Scan-Ergebnisse? Worauf achten?
• CRITICAL (sofort beheben, vollständige Systemübernahme möglich)
• HIGH (schnell beheben, ausnutzbar für Angriffe)
• MEDIUM (Behebung empfohlen)
• LOW (niedrigere Priorität, einplanen)
Tipps:
1) Zuerst Schwachstellen mit Fix-Version (Fixed Version = none/leer → noch kein Patch)
2) CRITICAL und HIGH priorisieren (CRITICAL oft mit öffentlichem Exploit)
3) CVE-Details unter https://cve.mitre.org prüfen
4) Trivy-Prinzip verstehen (JSON-Schwachstellendatenbank, Abgleich mit Paketliste – Fehlalarme möglich, Risiko im Code bewerten)
Wie behebt man Docker-Image-Schwachstellen systematisch?
1) Sicheres Basis-Image:
• Distroless nur 3,06 MB, kleiner als Alpine, ohne Shell/Paketmanager
• Google Distroless: python3/nodejs/static
• Docker Hardened Images 2025: nahezu null CVEs, 95 % kleiner
2) Basis-Image-Version:
• python:3.11.7 statt latest
• latest kann monatelang ohne Systempaket-Updates stehen
• Monatlich auf Minor-Updates prüfen
3) Systempakete im Dockerfile:
• RUN apt-get update && apt-get upgrade -y && apt-get clean && rm -rf /var/lib/apt/lists/*
• update/upgrade/clean in einem RUN – weniger Layer
4) Anwendungsabhängigkeiten:
• requirements.txt usw. anpassen
• Patch-Versionen zuerst (z. B. Flask 2.0.x statt Sprung auf 2.3.0)
• Vor Produktion in Testumgebung prüfen
Best Practices: Multi-Stage-Build, nicht als root, monatlich neu bauen, .dockerignore, nie latest.
Wie integriert man automatisierte Security-Scans in CI/CD?
• .github/workflows/docker-scan.yml
• Trigger bei push/pull_request
• Image bauen, aquasecurity/trivy-action
• severity: 'CRITICAL,HIGH', exit-code: '1'
• Ergebnisse auf GitHub Security
GitLab CI:
• .gitlab-ci.yml mit build/test/security
• aquasec/trivy:latest in security-Stage
• trivy image --exit-code 1 --severity HIGH,CRITICAL
• allow_failure: false (Produktion zwingend false)
Harbor:
• Ab v1.2 Trivy und Clair integriert
• Auto-Scan beim Push, täglicher Vollscan
• Schwellenwerte (CRITICAL blockiert Pull)
• Dev: Push triggert Scan, HIGH+ → Tag „Schwachstelle vorhanden“
• Prod: K8s admission webhook lehnt solche Images ab
Wie sollte ein vollständiger Docker-Image-Sicherheits-Scan-Workflow aussehen?
Entwicklung:
• Snyk/Trivy in der IDE
• Nach lokalem Build: trivy image
Build:
• GitHub Actions/GitLab CI
• CRITICAL → sofortiger Fehlschlag, Merge blockiert
• Ergebnisse ins Security Dashboard
Repository:
• Harbor-Nachscan (CI-Lücken, neue CVEs)
• Richtlinien gegen Pulls bei hohem Risiko
Laufzeit:
• Produktions-Images wöchentlich
• Alarm und geplante Behebung
Review:
• Monatliche Schwachstellen-Review
• Strategie und Schwellenwerte aktualisieren
Einmal konfiguriert läuft alles automatisch – von Setup bis stabil ca. ein Sprint (zwei Wochen) für langfristige Sicherheit.
9 Min. Lesezeit · Veröffentlicht am: 18. Dez. 2025 · Aktualisiert am: 14. Juli 2026
Docker Praxisleitfaden
Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.
Vorheriger
Docker Nginx vollständiger Leitfaden: Konfigurations-Mounts, HTTPS und Reverse Proxy
Vollständiges Tutorial zu Docker Nginx: Konfigurationsdateien mounten, HTTPS-Zertifikate einrichten und Reverse Proxy konfigurieren. Löst typische Probleme wie nicht wirksame Configs und Container-Kommunikation – inklusive Let's Encrypt Auto-Renewal und Produktions-Best Practices.
Teil 28 von 38
Nächster
Docker-Sicherheitskonfiguration: Vollständiger Leitfaden zum Betrieb ohne root
Docker-Container laufen standardmäßig als root – ein erhebliches Sicherheitsrisiko. Dieser Artikel erklärt Container-Escape-Mechanismen und zeigt vollständige Lösungen: Dockerfile-USER-Anweisung, --user-Parameter, granulare Capabilities-Kontrolle und AppArmor-Konfiguration für produktionsreife sichere Container.
Teil 30 von 38
Ähnliche Beiträge
Docker vs. virtuelle Maschine: Performance-Unterschiede und Szenario-Auswahl in 5 Minuten

Docker vs. virtuelle Maschine: Performance-Unterschiede und Szenario-Auswahl in 5 Minuten
Docker-Installation ohne Fallstricke (2025): Vollständige Lösungen von permission denied bis zum erfolgreichen Start


Kommentare
Melde dich mit GitHub an, um einen Kommentar zu hinterlassen