Docker : comment récupérer de l’espace disque

07 juin 2026 — par admin_libra

Docker est devenu incontournable dans les environnements de développement et de production sous Linux. Son modèle de couches superposées pour les images, sa gestion des volumes persistants et son cache de compilation sont des atouts indéniables — mais ils ont un coût : l’espace disque s’accumule silencieusement jusqu’au jour où le serveur refuse de démarrer un nouveau conteneur avec l’erreur redoutée no space left on device.

Sur une machine active, Docker peut facilement consommer plusieurs dizaines de gigaoctets : images obsolètes accumulées au fil des builds, conteneurs arrêtés mais jamais supprimés, volumes orphelins, et cache de compilation qui grossit après chaque docker build. Sans hygiène régulière, la situation dégénère rapidement.

Dans cet article, nous allons passer en revue toutes les méthodes disponibles pour diagnostiquer et récupérer l’espace disque consommé par Docker sur Debian et Ubuntu — des commandes de base aux stratégies d’automatisation avancées.

Diagnostiquer l’utilisation disque de Docker

Avant de supprimer quoi que ce soit, commencez par mesurer précisément ce que Docker consomme. La commande dédiée est docker system df :

docker system df

La sortie ressemble à ceci :

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          24        3         8.234GB   6.891GB (83%)
Containers      7         2         142MB     98MB (68%)
Local Volumes   12        4         3.1GB     1.8GB (58%)
Build Cache     156       0         4.2GB     4.2GB

La colonne RECLAIMABLE est la plus importante : elle indique exactement combien d’espace vous pouvez récupérer sans affecter les conteneurs actifs. Pour un rapport détaillé avec la liste de chaque objet et sa taille individuelle :

docker system df -v

Identifier les images encombrantes

Les dangling images (images orphelines) sont des couches sans tag et sans référence — elles apparaissent sous le nom <none> dans la liste des images. Elles sont généralement le résidu de builds successifs :

# Lister les images orphelines
docker images -f dangling=true

# Lister toutes les images avec leur taille
docker images --format "table {{.Repository}}t{{.Tag}}t{{.Size}}t{{.CreatedAt}}"

Nettoyage ciblé par type de ressource

Supprimer les conteneurs arrêtés

Les conteneurs arrêtés conservent leur couche d’écriture sur le disque. Sur une machine de CI/CD ou de développement, ils peuvent représenter plusieurs centaines de mégaoctets :

# Lister les conteneurs arrêtés
docker ps -a --filter status=exited

# Supprimer tous les conteneurs arrêtés
docker container prune -f

# Alternative : supprimer un conteneur spécifique
docker rm <container_id>

Nettoyer les images inutilisées

# Supprimer uniquement les images orphelines (dangling)
docker image prune -f

# Supprimer toutes les images non attachées à un conteneur actif
docker image prune -a -f

# Supprimer les images créées il y a plus de 72 heures
docker image prune -a --filter "until=72h" -f

L’option -a (--all) est plus agressive : elle supprime également les images taguées qui ne sont référencées par aucun conteneur en cours d’exécution. À utiliser avec précaution en production.

Supprimer les volumes inutilisés

Les volumes sont le point sensible du nettoyage Docker : ils peuvent contenir des données de bases de données, des fichiers de configuration ou des sauvegardes. Docker ne les supprime jamais automatiquement pour éviter toute perte accidentelle.

# Lister tous les volumes
docker volume ls

# Lister les volumes non référencés par un conteneur
docker volume ls -f dangling=true

# Supprimer les volumes inutilisés (ATTENTION : perte de données irréversible)
docker volume prune -f

# Docker 25.0+ : supprimer aussi les volumes nommés inutilisés
docker volume prune -a -f

Vérifiez toujours la liste des volumes avant de les supprimer. Un volume nommé mysql_data ou postgres_data contient vraisemblablement des données importantes.

Purger les réseaux inutilisés

Les réseaux Docker personnalisés consomment peu d’espace, mais ils peuvent entraîner des conflits d’adresses IP si ils s’accumulent :

docker network prune -f

Vider le cache de compilation (build cache)

Le cache de build est souvent le plus gros consommateur d’espace, notamment sur les machines de CI/CD où chaque pipeline ajoute des couches. Il peut facilement atteindre 10 à 20 Go sur une machine active :

# Supprimer le cache de build inutilisé
docker builder prune -f

# Vider intégralement le cache (ralentit les builds suivants)
docker builder prune -a -f

# Conserver uniquement les 5 derniers Go de cache récent
docker builder prune --keep-storage 5g -f

# Supprimer uniquement le cache de plus de 48 heures
docker builder prune --filter "until=48h" -f

Nettoyage global avec docker system prune

La commande docker system prune regroupe en une seule opération le nettoyage des conteneurs arrêtés, des images orphelines, des réseaux inutilisés et du cache de build :

# Nettoyage standard (sans les volumes ni les images taguées)
docker system prune -f

# Nettoyage complet incluant toutes les images inutilisées
docker system prune -a -f

# Nettoyage complet incluant les volumes (DESTRUCTIF)
docker system prune -a --volumes -f

Par défaut, docker system prune ne touche pas aux volumes pour éviter toute perte de données. L’option --volumes doit être utilisée explicitement et avec une grande prudence.

Gérer les logs des conteneurs

Les logs des conteneurs sont stockés dans /var/lib/docker/containers/ et peuvent grossir indéfiniment si aucune limite n’est configurée. Pour vérifier la taille des logs d’un conteneur spécifique :

# Trouver les fichiers de logs volumineux
find /var/lib/docker/containers/ -name "*.log" -exec ls -lh {} ; | sort -k5 -rh | head -20

Pour limiter la taille des logs à la création du conteneur :

docker run --log-opt max-size=10m --log-opt max-file=3 mon_image

Pour configurer cette limite globalement dans /etc/docker/daemon.json :

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Après modification, rechargez le démon Docker :

sudo systemctl reload docker

Utiliser des filtres temporels pour un nettoyage sélectif

Le drapeau --filter until= permet de ne supprimer que les ressources créées avant une certaine durée, ce qui est idéal pour préserver les ressources récentes :

# Supprimer les images inutilisées de plus d'une semaine
docker image prune -a --filter "until=168h" -f

# Supprimer les conteneurs arrêtés depuis plus de 24 heures
docker container prune --filter "until=24h" -f

# Conserver les ressources labellisées "keep"
docker image prune -a --filter "label!=keep" -f

Automatiser le nettoyage avec cron

Sur un serveur de production, une tâche cron hebdomadaire permet d’éviter l’accumulation progressive. Ajoutez cette entrée dans /etc/cron.d/docker-cleanup :

# Nettoyage Docker tous les dimanches à 3h du matin
0 3 * * 0 root /usr/bin/docker system prune -f --filter "until=168h" >> /var/log/docker-cleanup.log 2>&1

Pour un environnement de CI/CD, intégrez le nettoyage après chaque pipeline :

# Dans votre script de post-build
docker system prune -f
docker builder prune --filter "until=24h" -f

Optimiser les Dockerfiles pour réduire la taille des images

La meilleure façon de récupérer de l’espace disque est de ne pas le consommer inutilement. Quelques bonnes pratiques à intégrer dès la rédaction des Dockerfiles :

# Mauvaise pratique : couches multiples
RUN apt-get update
RUN apt-get install -y curl wget
RUN apt-get clean

# Bonne pratique : une seule couche, nettoyage inclus
RUN apt-get update && apt-get install -y 
    curl 
    wget 
    && apt-get clean 
    && rm -rf /var/lib/apt/lists/*

Les builds multi-étapes permettent de ne conserver dans l’image finale que les binaires nécessaires, en éliminant les outils de compilation :

FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o monapp .

FROM debian:bookworm-slim
COPY --from=builder /app/monapp /usr/local/bin/monapp
CMD ["monapp"]

Récapitulatif des commandes essentielles

Voici une synthèse ordonnée des commandes à utiliser lors d’une session de nettoyage :

# 1. Diagnostic
docker system df
docker system df -v

# 2. Nettoyage des conteneurs arrêtés
docker container prune -f

# 3. Nettoyage des images orphelines
docker image prune -f

# 4. Nettoyage du cache de build
docker builder prune --filter "until=48h" -f

# 5. Vérifier les volumes avant de les supprimer
docker volume ls -f dangling=true
docker volume prune -f

# 6. Nettoyage global (sans volumes)
docker system prune -a -f

À lire également

Références

Index complet

Tous les articles (41)

Date Article Tags
07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs