Docker : libérer de l'espace disque
Diagnostiquer d'abord
Avant de supprimer quoi que ce soit, mesure. docker system df ventile l'espace par type (images, conteneurs, volumes, build cache) et surtout la colonne RECLAIMABLE : ce que tu peux récupérer sans risque.
docker system df # vue d'ensemble / overview
docker system df -v # détail par image/volume/conteneur / per-item detail
sudo du -h --max-depth=1 /var/lib/docker | sort -hr # qui pèse quoi sur le disque / what weighs what on diskSi overlay2/ domine, ce sont les images et layers. Si volumes/ domine, ce sont tes données (prudence). Si containers/ est énorme, ce sont probablement des logs qui gonflent — voir plus bas.
Nettoyer par cible
Nettoie du moins risqué au plus risqué. Conteneurs arrêtés et images dangling (les <none> orphelines laissées par les rebuilds) : sans danger. Le build cache : sans danger aussi, il sera juste reconstruit au prochain build.
docker container prune # conteneurs arrêtés / stopped containers
docker image prune # images dangling uniquement / dangling images only
docker image prune -a # + toute image sans conteneur associé / + any image not used by a container
docker builder prune # build cache
docker builder prune --filter until=168h # cache de plus de 7 jours / cache older than 7 daysVolumes : la zone dangereuse
Les volumes contiennent tes données : bases de données, uploads, configs. Un volume "inutilisé" est juste un volume qu'aucun conteneur ne référence en ce moment — par exemple parce que tu as fait docker compose down avant de nettoyer.
⚠️ Ne lance jamais cette commande sans avoir listé et vérifié ce qu'elle va détruire. Un volume supprimé est irrécupérable.
docker volume ls -f dangling=true # d'abord : lister les candidats / first: list the candidates
docker volume prune # ⚠️ supprime les volumes non référencés / deletes unreferenced volumesLes logs qui gonflent
Par défaut, le driver json-file écrit les logs de chaque conteneur dans /var/lib/docker/containers/<id>/<id>-json.log — sans aucune limite. Un conteneur bavard peut remplir ton disque en quelques semaines. Trouve les coupables :
sudo find /var/lib/docker/containers -name '*-json.log' -exec du -h {} + | sort -hr | headLa vraie solution est de plafonner les logs via le daemon. Dans /etc/docker/daemon.json :
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}sudo systemctl restart dockerChaque conteneur sera limité à 3 fichiers de 10 Mo en rotation. Attention : ça ne s'applique qu'aux conteneurs créés après le redémarrage — recrée les existants (docker compose up -d --force-recreate) pour en profiter.
Le grand nettoyage
⚠️ docker system prune -a --volumes combine tout : conteneurs arrêtés, toutes les images inutilisées, tout le build cache, tous les réseaux orphelins et tous les volumes non référencés — donc potentiellement tes bases de données si les services sont éteints à ce moment-là. Ne l'utilise que si tu peux répondre "oui" à : "je peux tout perdre sur cette machine ?". Sinon, nettoie cible par cible comme ci-dessus.
docker system prune # version prudente : ni images taguées, ni volumes / safe version: no tagged images, no volumes
docker system prune -a --volumes # ⚠️ tout, y compris les volumes / everything, volumes included