RousselTMLEARNING

Observabilité

Scanner ses images Docker : Trivy, Grype et Docker Scout

Détecter les vulnérabilités et erreurs de configuration des images avec Trivy, lire les résultats, filtrer ce qui est corrigible et bloquer la CI.

1. Ce que cherche un scanner #

Vulnérabilités, configuration, secrets.

Le principe #

Un scanner inventorie les paquets de l'image (système et langages : npm, pip, Maven…) et les compare aux bases de vulnérabilités (CVE). Trivy cherche aussi les erreurs de configuration (Dockerfile, Kubernetes, Terraform) et les secrets oubliés.

Scanner au build, en CI, dans le registre et en production

2. Trivy en pratique #

Des résultats réels.

Scanner une image #

trivy image --severity HIGH,CRITICAL php:8.2-fpm-alpine
trivy image --ignore-unfixed --severity HIGH,CRITICAL nginx:1.30.6
trivy image --format json -o rapport.json monimage:1.0

Sur une image PHP construite en 2023 (Alpine 3.18), Trivy a trouvé 23 vulnérabilités HIGH et CRITICAL, toutes corrigées depuis :

PaquetCVEInstalléeCorrigée en
curlCVE-2023-385458.3.0-r08.4.0-r0
curlCVE-2024-61978.3.0-r08.9.0-r0
libcrypto3CVE-2023-53633.1.3-r03.1.4-r0
libcrypto3CVE-2024-61193.1.3-r03.1.7-r0

Ici, la correction est simple : reconstruire l'image sur une base à jour.

Le bruit des vulnérabilités sans correctif #

Sur l'image nginx officielle la plus récente (Debian), Trivy remonte 71 vulnérabilités HIGH et CRITICAL, dont 69 sans correctif disponible. Bloquer la CI sur ces 69 ne mènerait nulle part : utilisez --ignore-unfixed pour ne retenir que ce que vous pouvez corriger, et suivez le reste dans un fichier .trivyignore justifié, ou passez à une image durcie.

Scanner aussi la configuration #

trivy config Dockerfile
Tests: 27 (SUCCESSES: 22, FAILURES: 5)
Failures: 5 (UNKNOWN: 0, LOW: 2, MEDIUM: 1, HIGH: 2, CRITICAL: 0)
DS-0001 (MEDIUM): Specify a tag in the 'FROM' statement for image 'node'
DS-0002 (HIGH): Specify at least 1 USER command in Dockerfile with non-root user as argument
DS-0005 (LOW): Consider using 'COPY . /app' command instead of 'ADD . /app'
DS-0026 (LOW): Add HEALTHCHECK instruction in your Dockerfile
DS-0029 (HIGH): '--no-install-recommends' flag is missed: 'apt-get update && apt-get install -y curl'

Trivy recoupe Hadolint (version, ADD, --no-install-recommends) et ajoute l'absence d'utilisateur non-root et de HEALTHCHECK.

3. Bloquer en CI, et les alternatives #

Automatiser.

Dans un pipeline #

name: image
on: [push, pull_request]
jobs:
  build-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lint du Dockerfile
        run: docker run --rm -i hadolint/hadolint:v2.15.1 hadolint --failure-threshold warning - < Dockerfile
      - name: Construire l'image
        run: docker build -t app:${{ github.sha }} .
      - name: Scanner l'image
        run: |
          docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.76.2 \
            image --exit-code 1 --ignore-unfixed --severity HIGH,CRITICAL app:${{ github.sha }}

--exit-code 1 fait échouer le job dès qu'une vulnérabilité HIGH ou CRITICAL corrigible est trouvée.

Les autres outils #

OutilPoints forts
Trivy (Aqua)Vulnérabilités, configuration, secrets, SBOM ; libre
Grype (Anchore)Scanner libre rapide, souvent couplé à Syft pour le SBOM : grype monimage:1.0
Docker ScoutIntégré à Docker Desktop et Docker Hub, recommandations d’image de base : docker scout cves monimage:1.0
RegistresHarbor (Trivy intégré), GitLab, GitHub : scan à la réception

Grype et Docker Scout n'ont pas été exécutés pour cet article ; leurs commandes viennent de leur documentation.

Sources #

Résultats réels de Trivy 0.76.2, novembre 2026 ; les nombres évoluent chaque jour avec les bases de vulnérabilités.

Articles liés

Images durcies : réduire la surface d'attaque de ses conteneurs

Choisir une image de base durcie : slim, distroless, Docker Hardened Images, Chainguard ; non-root, versions …

Linter ses Dockerfile avec Hadolint et docker build --check

Repérer les erreurs et mauvaises pratiques d'un Dockerfile avant la construction : Hadolint, ses règles, ses …

SBOM : l'inventaire des composants de vos images

Générer un SBOM CycloneDX ou SPDX, le rescanner sans reconstruire et savoir en quelques secondes quelles imag…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !