Erreurs
❌ Erreur Docker/Proxmox "Docker Container Exit Code non-zéro" — Causes et Solutions
🐳 Docker / Proxmox
Un container Docker s'arrête immédiatement avec un code d'erreur
Quand un container Docker démarre puis s'arrête immédiatement avec un exit code non-zéro, c'est que le processus principal du container a rencontré une erreur. Chaque code d'exit a une signification précise et oriente le diagnostic.
⚠️ Causes possibles
Exit code 1 — erreur applicative
Le programme principal a rencontré une erreur (config manquante, bug, exception)
Exit code 137 — OOMKilled
Le kernel a tué le container car il dépassait la limite mémoire (Out Of Memory)
Exit code 139 — Segfault
Le processus a causé une violation d'accès mémoire (segmentation fault)
Exit code 125, 126, 127
Erreur Docker lui-même : image invalide, commande non trouvée, permission refusée
Entrypoint ou CMD incorrect
La commande de démarrage définie dans le Dockerfile n'existe pas ou échoue
Variables d'environnement manquantes
L'application requiert des variables d'env non fournies au container
🔧 Solutions étape par étape
1
Lire les logs du container
# Voir les logs du dernier container (arrêté) docker logsdocker logs $(docker ps -lq) # Dernier container # Logs en temps réel pendant le démarrage docker logs -f # Logs des 100 dernières lignes docker logs --tail 100 # Voir les logs horodatés docker logs --timestamps # Voir le code de sortie docker inspect --format='{{.State.ExitCode}}' docker inspect --format='{{.State.Error}}' # Voir si OOMKilled docker inspect --format='{{.State.OOMKilled}}'
2
Déchiffrer les codes d'exit
# Exit code 0 → Succès (arrêt normal)
# Exit code 1 → Erreur générale (voir docker logs)
# Exit code 2 → Mauvaise utilisation de la commande shell
# Exit code 125 → Docker lui-même a échoué
# Exit code 126 → Commande non exécutable (permissions)
# Exit code 127 → Commande introuvable dans le container
# Exit code 130 → Terminé par Ctrl+C (SIGINT)
# Exit code 137 → Tué par le kernel (OOM ou SIGKILL)
# Exit code 139 → Segmentation fault (SIGSEGV)
# Exit code 143 → Tué proprement (SIGTERM)
# Exit code 255 → Erreur de sortie générique
# Commande pratique pour voir le dernier exit code
docker inspect --format='ExitCode={{.State.ExitCode}} OOMKilled={{.State.OOMKilled}}' $(docker ps -lq)3
Déboguer un container qui s'arrête
# Remplacer l'entrypoint pour ouvrir un shell de debug docker run -it --entrypoint /bin/sh mon-image # ou docker run -it --entrypoint /bin/bash mon-image # Lancer avec un sleep pour avoir le temps d'inspecter docker run -it --entrypoint sleep mon-image 3600 # Puis dans un autre terminal : docker exec -it/bin/sh # Voir les variables d'environnement du container docker inspect --format='{{range .Config.Env}}{{.}} {{end}}' # Voir les volumes montés docker inspect --format='{{json .Mounts}}'
4
Corriger un OOMKill (Exit 137)
# Vérifier si le container a été OOMKilled docker inspect| grep OOMKilled # Si "OOMKilled": true → manque de mémoire # Voir les stats mémoire du container docker stats --no-stream # Augmenter la limite mémoire docker run --memory="512m" --memory-swap="1g" mon-image # Dans docker-compose.yml services: webapp: image: mon-image deploy: resources: limits: memory: 512M reservations: memory: 256M # Voir les messages OOM dans les logs système dmesg | grep -i "oom\|kill" | tail -20 journalctl -k | grep -i oom | tail -20
5
Corriger les variables d'environnement manquantes
# Passer les variables d'environnement
docker run -e DB_HOST=192.168.1.10 -e DB_PORT=5432 mon-image
# Via un fichier .env
docker run --env-file .env mon-image
# Dans docker-compose.yml
services:
webapp:
image: mon-image
environment:
- DB_HOST=192.168.1.10
- DB_PORT=5432
- DB_NAME=mabase
env_file:
- .env
# Vérifier les variables requises dans le Dockerfile
# Chercher les ENV et ARG dans le Dockerfile
grep -E "^ENV|^ARG" Dockerfile🛡️ Comment éviter cette erreur
- ✅ Toujours lire
docker logs container_iden premier réflexe quand un container s'arrête - ✅ Configurer des health checks dans le Dockerfile :
HEALTHCHECK CMD curl -f http://localhost/ || exit 1 - ✅ Définir des limites mémoire explicites pour éviter les OOMKill :
--memory=512m - ✅ Utiliser
docker run --restart=on-failure:3pour les services critiques en production
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google