Erreurs

❌ Erreur Docker/Proxmox "No space left on device (Docker)" — Causes et Solutions

🐳 Docker / Proxmox

Docker a rempli le disque — images, volumes et layers inutilisés à nettoyer

🐳 Docker/Proxmox 📋 6 causes 🔧 5 solutions
L'erreur no space left on device dans Docker est particulièrement courante car Docker accumule silencieusement les images, les couches (layers), les volumes orphelins et les containers arrêtés. Un seul docker system prune récupère souvent plusieurs dizaines de GB.

⚠️ Causes possibles

⚠️
Images inutilisées accumulées
Chaque build Docker crée de nouvelles images — les anciennes restent sur le disque
⚠️
Volumes orphelins
Des volumes créés par des containers supprimés restent sur le disque
⚠️
Build cache volumineux
Le cache de build Docker peut occuper plusieurs GB
⚠️
Logs des containers illimités
Les logs JSON des containers grossissent sans limite si non configurés
⚠️
Layers dupliquées
Les couches intermédiaires des images s'accumulent lors des builds
⚠️
Containers arrêtés non supprimés
Les containers en état 'Exited' occupent encore de l'espace

🔧 Solutions étape par étape

1

Diagnostic de l'espace Docker

terminal
# Vue globale de l'espace utilisé par Docker
docker system df
docker system df -v  # Détaillé

# Voir la taille de /var/lib/docker
du -sh /var/lib/docker/
du -sh /var/lib/docker/*/

# Lister les images par taille
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -rh | head -20

# Lister les volumes
docker volume ls
docker volume ls -f dangling=true  # Volumes orphelins

# Voir les containers arrêtés
docker ps -a --filter status=exited
2

Nettoyage rapide — docker system prune

terminal
# Nettoyage standard (containers, réseaux, images inutilisées)
docker system prune

# Nettoyage complet avec volumes (⚠️ supprime les données !)
docker system prune -a --volumes

# Nettoyage avec confirmation automatique
docker system prune -f
docker system prune -a --volumes -f

# Voir ce qui sera supprimé sans supprimer
docker system prune --dry-run 2>/dev/null ||   echo "Simuler : docker system df -v pour voir les candidats"

# Vérifier l'espace récupéré
docker system df
3

Nettoyage ciblé par type

terminal
# 1. Supprimer les containers arrêtés
docker container prune -f
docker rm $(docker ps -aq -f status=exited) 2>/dev/null

# 2. Supprimer les images inutilisées (dangling)
docker image prune -f
# Supprimer TOUTES les images non utilisées
docker image prune -a -f

# 3. Supprimer les volumes orphelins
docker volume prune -f

# 4. Supprimer les réseaux inutilisés
docker network prune -f

# 5. Nettoyer le cache de build
docker builder prune -f
docker builder prune -a -f  # Tout le cache
4

Limiter la taille des logs Docker

terminal
# Option 1 : configurer globalement dans /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

# Appliquer
systemctl restart docker

# Option 2 : par container (docker run)
docker run --log-opt max-size=10m --log-opt max-file=3 monimage

# Option 3 : par service dans docker-compose.yml
services:
  webapp:
    image: nginx
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

# Voir la taille des logs d'un container
find /var/lib/docker/containers/ -name "*.log" -exec ls -lh {} \;
5

Automatiser le nettoyage avec cron

terminal
# Nettoyage hebdomadaire automatique
crontab -e
# Ajouter :
0 2 * * 0 docker system prune -f --filter "until=168h" >> /var/log/docker-prune.log 2>&1

# Script de nettoyage avancé
#!/bin/bash
echo "=== Docker Cleanup $(date) ==="
echo "Avant :"
docker system df

docker container prune -f --filter "until=24h"
docker image prune -f --filter "until=168h"
docker volume prune -f
docker builder prune -f --keep-storage 5GB

echo "Après :"
docker system df

# Déplacer /var/lib/docker vers un volume dédié
# (si partition root trop petite)
systemctl stop docker
mv /var/lib/docker /data/docker
ln -s /data/docker /var/lib/docker
systemctl start docker

🛡️ Comment éviter cette erreur

  • ✅ Configurer les limites de logs dans /etc/docker/daemon.json avant toute utilisation en production
  • ✅ Planifier un docker system prune -f hebdomadaire via cron
  • ✅ Dédier une partition ou un volume LVM à /var/lib/docker pour isoler l'espace Docker
  • ✅ Monitorer l'espace /var/lib/docker avec Zabbix et alerter à 80%
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google