Diagnostiquer une application qui ne marche pas : la méthode en 6 étapes
Une application Docker ne s'affiche plus ? La méthode pas à pas : état du conteneur, logs, ressources, reverse proxy, DNS. Avec les commandes et comment lire les réponses.
Une application ne s’affiche plus. Plutôt que de tout redémarrer au hasard, suivez ces étapes dans l’ordre : chacune élimine une cause, et la plupart des pannes sont trouvées avant la quatrième.
Remplacez vaultwarden par le nom de votre application (le nom de son dossier dans /opt/stacks).
Étape 1 : le conteneur tourne-t-il ?
cd /opt/stacks/vaultwarden
sudo docker compose ps -a
| Ce que vous voyez | Ce que ça veut dire |
|---|---|
Up 3 hours |
Il tourne : passez à l’étape 3 |
Up 3 hours (healthy) |
Il tourne et son auto-test est bon |
Up 2 seconds qui revient sans cesse, ou Restarting |
Il plante et redémarre en boucle : étape 2 |
Exited (0) |
Il s’est arrêté proprement… et personne ne l’a relancé |
Exited (1), Exited (137) |
Il a planté (137 = manque de mémoire) |
| Rien | Le conteneur n’existe pas : sudo docker compose up -d |
Pour un conteneur arrêté, tentez simplement :
sudo docker compose up -d
Étape 2 : que disent les logs ?
sudo docker compose logs --tail 100
Lisez de bas en haut : la dernière erreur avant l’arrêt est souvent la bonne. Copiez ces lignes dans le décodeur d’erreurs : il reconnaît les plus fréquentes et dit lesquelles sont graves.
Pour une application à plusieurs conteneurs, regardez chacun :
sudo docker compose logs db --tail 50
Une application qui ne trouve pas sa base de données est souvent une base qui ne démarre pas.
Étape 3 : le serveur a-t-il des ressources ?
df -h / # disque : au-dessus de 95 %, tout devient instable
free -h # mémoire : regardez la colonne « available »
sudo docker stats --no-stream
Un disque plein ou une mémoire saturée provoquent des pannes en cascade, sur plusieurs applications à la fois. Voir libérer de l’espace disque.
Étape 4 : l’application répond-elle de l’intérieur ?
On contourne le reverse proxy pour savoir de quel côté est le problème :
sudo docker exec traefik wget -qO- -T 5 http://vaultwarden:8080 | head -5
(remplacez traefik par caddy selon votre reverse proxy, et 8080 par le port de l’application, visible dans le
label loadbalancer.server.port ou la ligne reverse_proxy.)
- Du contenu s’affiche : l’application va bien, le problème est dans le reverse proxy ou le DNS (étape 5).
- Erreur ou délai : l’application elle-même ne répond pas. Retour aux logs (étape 2).
Étape 5 : le reverse proxy
sudo docker logs traefik --since 30m 2>&1 | grep -iE "err|warn" | tail -20
Les messages typiques et leur sens :
- « middleware … does not exist » : faute dans un label ;
- « Unable to obtain ACME certificate » : le certificat HTTPS ne s’obtient pas ;
- « 404 page not found » dans le navigateur : aucune règle pour cette adresse ;
- « Bad Gateway » : la règle existe, l’application ne répond pas.
Et vérifiez que le reverse proxy lui-même tourne : sudo docker ps --filter name=traefik. S’il est arrêté,
tous vos sites sont inaccessibles.
Étape 6 : le DNS et le réseau
Depuis votre ordinateur :
nslookup vault.mondomaine.fr # doit donner l'IP de votre serveur
curl -sI https://vault.mondomaine.fr | head -3
Si l’IP est fausse, corrigez l’entrée DNS (guide). Si curl ne répond pas du tout,
vérifiez le pare-feu (ports 80 et 443) et l’état du serveur chez votre hébergeur.
Quand rien ne marche : les événements récents
Qu’est-ce qui a changé ? Une mise à jour, un redémarrage, une modification de configuration ?
sudo docker events --since 24h --until 0s --filter event=die --filter event=restart
journalctl -u docker --since -24h | tail -30
tail -30 /var/log/apt/history.log # paquets mis à jour récemment
Une mise à jour de Docker pendant la nuit, et un conteneur qui ne repart pas : c’est un grand classique, expliqué dans relancer ses conteneurs après un incident.
La fiche à garder sous la main
sudo docker compose ps -a # 1. ça tourne ?
sudo docker compose logs --tail 100 # 2. ça dit quoi ?
df -h / && free -h # 3. il reste de la place ?
sudo docker logs traefik --since 30m # 5. le reverse proxy est d'accord ?
Une commande qui ne marche pas, une explication pas claire ? Signaler une erreur dans cette page.