DEVOPS

10 erreurs fréquentes dans un Dockerfile

Un Dockerfile peut produire une image fonctionnelle tout en conservant des secrets, des privilèges excessifs ou des dépendances impossibles à reproduire.

Commencez par supprimer les secrets et réduire les privilèges. Travaillez ensuite sur la reproductibilité, la surface de l’image et le comportement du processus principal.

Image de base et dépendances

1. Utiliser uniquement le tag latest

Le contenu récupéré peut changer entre deux constructions. Choisissez une version précise et, pour une reproductibilité stricte, envisagez de figer également le digest tout en planifiant son renouvellement.

2. Installer sans nettoyer le cache

Regroupez la mise à jour de l’index, l’installation et le nettoyage dans une même instruction RUN. Pour Python, utilisez par exemple pip install --no-cache-dir.

3. Télécharger puis exécuter sans vérifier

Évitez les commandes distantes envoyées directement vers un shell. Téléchargez l’artefact, vérifiez sa somme ou sa signature, puis exécutez-le seulement si le contrôle réussit.

Secrets et contexte de construction

4. Stocker un secret avec ARG ou ENV

Un secret peut rester visible dans les couches, l’historique ou les métadonnées de l’image. Utilisez les mécanismes de secrets du constructeur et injectez les secrets applicatifs au moment de l’exécution.

5. Copier tout le dépôt avec COPY . .

Sans fichier .dockerignore, cette instruction peut inclure le dépôt Git, des fichiers locaux, des sauvegardes ou des secrets. Copiez d’abord les fichiers de dépendances puis uniquement les sources nécessaires.

Privilèges et permissions

6. Exécuter l’application en root

Créez ou sélectionnez un utilisateur non privilégié, préparez les permissions nécessaires puis terminez par une instruction USER.

7. Utiliser chmod 777

Accordez seulement les droits requis. Préférez un propriétaire explicite avec COPY --chown et des permissions ciblées.

Construction et exécution

8. Conserver les outils de compilation dans l’image finale

Une construction multi-étapes permet de compiler dans une première image puis de copier uniquement les artefacts nécessaires dans une image finale plus petite.

9. Utiliser la forme shell pour le processus principal

CMD ["python", "-m", "app"]

La forme JSON limite les ambiguïtés du shell et facilite la transmission correcte des signaux au processus principal.

10. Ajouter un HEALTHCHECK inutile ou absent

Ajoutez un contrôle seulement s’il mesure réellement la disponibilité du service. Une simple présence du processus peut masquer une application bloquée, tandis qu’un test trop lourd dégrade inutilement le conteneur.

Analyser le Dockerfile sans construire l’image

ConfigCheck détecte les choix risqués et propose des priorités de correction sans télécharger ni exécuter le contenu.

Analyser mon Dockerfile

Dans quel ordre corriger ?

  1. Retirez immédiatement les secrets et téléchargements non vérifiés.
  2. Abandonnez root et les permissions excessives.
  3. Réduisez le contexte de construction avec .dockerignore.
  4. Figez les versions et rendez les installations reproductibles.
  5. Optimisez les couches et adoptez une construction multi-étapes si utile.
  6. Construisez l’image, analysez ses vulnérabilités puis testez son exécution.

Consultez également les bonnes pratiques officielles de construction Docker et, pour les services associés, les erreurs fréquentes dans Docker Compose.

Publié le 1er août 2026.