Aller au contenu
Conteneurs & Orchestration medium

Hadolint : Analyse statique de Dockerfiles

6 min de lecture

Logo hadolint

Hadolint analyse vos Dockerfiles et détecte automatiquement les erreurs, les failles de sécurité et les mauvaises pratiques. Basé sur les recommandations officielles de Docker, il identifie les problèmes comme les versions non épinglées (DL3008), les pipes sans pipefail (DL4006) ou l’utilisation de latest (DL3007). Intégrable en CI/CD, il bloque les builds non conformes avant le déploiement.

Lorsqu’on écrit un Dockerfile, il est facile de faire des erreurs qui impactent la sécurité, les performances ou la maintenabilité des images. Hadolint s’appuie sur des règles bien définies pour proposer des corrections concrètes.

Hadolint est conçu pour analyser les Dockerfiles et détecter les erreurs, les mauvaises pratiques et les recommandations d’optimisation. Voici ses principales fonctionnalités.

Lorsqu’un Dockerfile est analysé, Hadolint renvoie une liste de recommandations classées par gravité. Chaque erreur est associée à un code spécifique qui permet de comprendre et corriger le problème.

Exemple d’analyse :

Fenêtre de terminal
hadolint Dockerfile

Résultat typique :

Fenêtre de terminal
Dockerfile:3 DL3008 warning: Pin versions in apt-get install
Dockerfile:6 DL4006 error: Set the SHELL option -o pipefail before RUN with a pipe in it

Hadolint aide aussi à identifier les problèmes liés aux dépendances, comme l’absence de versions épinglées dans les instructions RUN apt-get install. Cela permet d’éviter des builds non reproductibles et des erreurs inattendues.

L’installation de Hadolint est simple et s’adapte à plusieurs environnements. Voici comment procéder en fonction de votre système d’exploitation.

La méthode la plus simple consiste à télécharger le binaire directement :

Fenêtre de terminal
sudo wget -O /usr/local/bin/hadolint https://github.com/hadolint/hadolint/releases/latest/download/hadolint-$(uname -s)-$(uname -m)
sudo chmod +x /usr/local/bin/hadolint

Sous Windows, Hadolint peut être installé via Chocolatey :

Fenêtre de terminal
choco install hadolint

Ou avec Scoop :

Fenêtre de terminal
scoop install hadolint

On peut ensuite vérifier l’installation avec :

Fenêtre de terminal
hadolint --version
Haskell Dockerfile Linter 2.14.0

Une fois Hadolint installé, son utilisation est simple. Il suffit de l’exécuter sur un Dockerfile pour obtenir un rapport détaillé des erreurs et recommandations.

La commande la plus simple pour analyser un Dockerfile est :

Fenêtre de terminal
hadolint Dockerfile

Si le fichier contient des erreurs, Hadolint affichera une liste avec le numéro de ligne, le code de la règle et une brève description du problème :

Fenêtre de terminal
Dockerfile:3 DL3008 warning: Pin versions in apt-get install
Dockerfile:6 DL4006 error: Set the SHELL option -o pipefail before RUN with a pipe in it

Chaque message d’erreur est accompagné d’un code de règle (ex: DL3008, DL4006). Ces règles sont documentées sur le site officiel de Hadolint, ce qui permet de comprendre leur signification et comment les corriger.

  • DL3008 : Ne pas installer des paquets sans version spécifique Mauvais exemple :

    RUN apt-get install -y curl

    Bon exemple :

    RUN apt-get install -y curl=7.68.0-1ubuntu2.7
  • DL4006 : Utiliser SHELL pour modifier les options par défaut

    Mauvais exemple :

    RUN echo "Hello" | cat

    Bon exemple :

    SHELL ["/bin/bash", "-o", "pipefail", "-c"]
    RUN echo "Hello" | cat

Si une règle n’est pas pertinente pour un projet, on peut l’ignorer avec :

Fenêtre de terminal
hadolint --ignore DL3008 Dockerfile

Ou ajouter un commentaire directement dans le Dockerfile :

# hadolint ignore=DL3008
RUN apt-get install -y curl

Avec ces bases, Hadolint devient un outil incontournable pour améliorer la qualité des Dockerfiles et éviter les mauvaises pratiques.

Pour éviter de répeter les ignore à répéition, il suffit de créer un fichier .hadolint.yaml pour gérer la configuration :

ignored:
- DL3008
- DL4006

L’intégration de Hadolint dans un pipeline CI/CD permet d’automatiser la vérification des Dockerfiles et d’empêcher le déploiement de mauvaises pratiques

Dans un projet GitLab, on peut ajouter une étape d’analyse Hadolint dans le fichier .gitlab-ci.yml :

stages:
- lint
hadolint:
image: hadolint/hadolint:v2.14.0-alpine
stage: lint
script:
- hadolint Dockerfile

Si des erreurs sont détectées, le pipeline échouera et demandera une correction avant de poursuivre le déploiement.

Pour GitHub, on peut créer un workflow .github/workflows/hadolint.yml :

name: Hadolint
on: [push, pull_request]
jobs:
hadolint:
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run Hadolint
uses: hadolint/hadolint-action@v3.3.0
with:
dockerfile: Dockerfile

Ce workflow exécute Hadolint à chaque push ou pull request et affiche les erreurs directement dans l’interface de GitHub Actions.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.