6.2 · Problèmes récurrents (playbook)

Niveau 6 · Dans la pratique

6.2Problèmes récurrents (playbook)

Objectif : disposer d'un playbook « symptôme → causes → actions » pour les pannes Docker courantes.
Temps estimé : 12 min · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Diagnostiquer : un symptôme = des causes probables = une séquence d'actions — on ne corrige pas au hasard.
  • Racines : variables, ports, volumes, rebuild oublié, healthcheck, droits, cache, login — 90 % des blocages.
  • Vérifier : ps, logs, config et preuve sur volume réel, pas seulement sur un run isolé.

Fil Idir — le tableau scotché à côté de l'écran

Idir garde ce tableau à côté de son écran à Alger. Verdict après un trimestre : trois lignes l'ont le plus servi — le conteneur en Restarting, le port déjà alloué, et les données perdues après rm. Pour chacune, il a fini par appliquer la séquence (symptôme, causes, actions) au lieu de relancer au hasard.

Symptôme observé, causes vérifiées, actions dans l'ordre : le réflexe tient en trois temps.

Un réflexe par symptôme

La plupart des blocages Docker sont des grands classiques. Relier chaque symptôme à ses causes probables et à une séquence d'actions fait gagner un temps précieux.

SymptômeCauses probablesActions
Conteneur en Restartingvariable -e manquante, volume au mauvais chemin, port occupécompose ps, logs du service, corriger le fichier, up -d
port already allocatedsquatteur (vieux run), deux stacks même port hôtedocker ps global, changer le port hôte (gauche)
Données perdues après rmaucun volume, montage au mauvais cheminajouter un volume nommé, prouver par rm + relance
up ignore le nouveau codeimage non reconstruiteup -d --build (ou bind en dev)
Base « pas prête » au démarragedepends_on sans condition, pas de retryhealthcheck + condition healthy + retry appli
Permission denied sur volumemontage root, USER non-root sans chownchown au build / aligner UID, ne pas revenir root
Image énorme / build lentCOPY . . en premier, pas de .dockerignoredépendances d'abord + .dockerignore + multi-stage
Push deniedpas de login, nom sans namespace, pas de droitslogin, nom compte/image, droits
down a tout effacédown -v sur données vouluesdown sans -v par défaut ; sauvegardes + restauration testée
Erreur d'interprétation fréquente : « le tableau remplace le diagnostic ». Non. Le tableau donne des causes probables, pas un verdict : observez le symptôme, vérifiez la cause (ps, logs, config, chemins), puis appliquez l'action ciblée.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : Méthode du tableau : 1) Nommer le symptôme observé (Restarting, port alloué, données perdues, up qui ignore le code, base pas prête, permission denied, image énorme, push denied, down destructeur). 2) Retenir les causes probables du tableau sans conclure seul (variables, ports, volumes, rebuild, healthcheck, droits, cache, login). 3) Appliquer les actions dans l'ordre (ps, logs, config, correction ciblée, rebuild, healthcheck, chown, .dockerignore, login, sauvegarde). 4) Corriger à la racine (la même panne qui revient = une conception à corriger : volumes, healthchecks, tags). Leçon : une panne qui revient appelle un réglage, pas des relances au hasard.

Script prêt à dire — diagnostiquer sans relancer au hasard (30 s)

« Mon symptôme : [Restarting / port alloué / données perdues / base pas prête]. Je vérifie la cause probable du tableau (ps, logs, config, chemins), j'applique l'action ciblée et je prouve (relance, down/up, restauration). »

Modèle copier-coller — diagnostic Docker

docker compose ps
docker compose logs -f api
docker ps -a
docker compose config
docker compose up -d --build

TPE / petit budget

Pas de tableau formel : un symptôme, la cause probable, l'action et qui prouve, notés.

PME Alger

Intégrer les réalités locales au diagnostic : machine réelle, ports déjà pris, référent connu.

Remote / hybride

Ajouter les traces écrites aux actions : à distance, un log et une preuve down/up consignés évitent les doublons.

Interculturel

Expliciter les constats par écrit : ce qui semble évident (quel service, quel port) ne l'est pas pour tous.

Prudence : Rappel générique : une même panne qui revient n'est pas dix incidents — corrigez la conception à la racine (volumes, healthchecks, tags) et ne détruisez jamais de volumes voulus (down sans -v par défaut, sauvegardes testées).

Défi 48h — appliquez demain

Repérez 1 symptôme actuel (Restarting, port, données, base pas prête), appliquez la ligne du tableau (symptôme nommé + cause vérifiée + action ciblée) et prouvez.

Checklist sortie de section
  • Je sais relier un symptôme à ses causes probables.
  • Je vérifie ps, logs et config avant de corriger.
  • Je prouve chaque correction (relance, down/up, restauration).
Auto-évaluation 1-5 : diagnostic avant correction ?preuve systématique après correction ?
Vérifiez votre compréhension

Le conteneur d'Idir boucle en Restarting. Quel réflexe applique le tableau ?

💡

Réflexe : diagnostiquer le symptôme, identifier la cause, appliquer l'action ciblée — ne pas relancer au hasard.