--- title: PruneMate created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, docker, maintenance, nettoyage, go, cron] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Docker, https://github.com/anoniemerd/PruneMate] --- # 🐳 PruneMate > **Le gardien de l'espace disque** : nettoyez automatiquement images, volumes, réseaux et conteneurs inutilisés. Parce qu'un `docker system prune` manuel toutes les 3 semaines, ça ne tient pas. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | (GitHub) | | **GitHub** | [anoniemerd/PruneMate](https://github.com/anoniemerd/PruneMate) | | **License** | MIT | | **Langage** | Go | | **Étoiles GitHub** | 459 ⭐ | | **Dernière MAJ** | 2026-04 | | **Catégorie** | [[cat-docker\|Docker]] | ## 📝 Description **PruneMate** est un **conteneur d'auto-nettoyage Docker**. Il exécute périodiquement `docker system prune` selon des **règles configurables** : garder les N dernières images d'un repo, ne pas toucher aux volumes de plus de X jours, ne supprimer que les dangling images, etc. C'est l'équivalent d'un `cron` intelligent pour le ménage Docker. - ✅ **Planification** via cron interne (toutes les N heures) - ✅ **Politiques granulaires** : images, conteneurs, volumes, networks, build cache - ✅ **Mode dry-run** : simule sans rien supprimer - ✅ **Notifications** : rapport par email, Discord, Slack, webhook - ✅ **Whitelist de volumes** : protège les données critiques - ✅ **Whitelist d'images** : jamais supprimer `postgres:16`, etc. - ✅ **Statistiques** : espace libéré par run - ✅ **Logs détaillés** : pour audit - ✅ **API REST** pour déclenchement manuel - ✅ **Binaire Go** : image légère (~15 Mo) - ✅ **MIT** : auditable **Public cible** : tout homelabber qui voit `/var/lib/docker` grossir inexorablement. Indispensable pour les setups avec **Watchtower** ou [[app-diun]] qui tirent fréquemment de nouvelles images. **Différence avec `docker system prune`** : PruneMate **automatise** et **granularise** : vous choisissez ce qui est safe à supprimer, il s'occupe du reste. Fini les `cron` artisanaux. ## 🚀 Installation ### Docker Compose ```yaml # docker-compose.yml version: '3.8' services: prunemate: image: ghcr.io/anoniemerd/prunemate:latest container_name: prunemate restart: unless-stopped environment: - CRON_SCHEDULE=0 3 * * * # tous les jours à 3h du matin - DRY_RUN=false - PRUNE_IMAGES_UNTIL=72h - PRUNE_VOLUMES=false # ne pas toucher aux volumes - PRUNE_CONTAINERS=true - PROTECTED_IMAGES=postgres:16,redis:7 - WEBHOOK_URL=https://discord.com/api/webhooks/*** volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - prunemate-data:/data volumes: prunemate-data: ``` ### Docker run ```bash docker run -d \ --name prunemate \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -e CRON_SCHEDULE="0 3 * * *" \ -e PRUNE_IMAGES_UNTIL=72h \ ghcr.io/anoniemerd/prunemate:latest ``` ## ⚙️ Configuration Initiale 1. **Choisir la politique de rétention** : combien de temps garder les images inutilisées (`72h`, `7d`, `30d`) 2. **Lister les images protégées** : bases de données, données critiques 3. **Décider des volumes** : `PRUNE_VOLUMES=false` recommandé pour les débutants 4. **Tester en dry-run** : `DRY_RUN=true` pendant 1 semaine pour observer 5. **Activer les notifications** : webhook Discord ou email 6. **Surveiller l'espace disque** : `df -h /var/lib/docker` ## 🔄 Alternatives ### Open Source - **`docker system prune`** natif — Manuel, pas de scheduling - [[app-cup]] — Inclut un mode prune - **Watchtower** — Notifications de MAJ, pas de nettoyage - **Docker Cron** — Scripts artisanaux équivalents - **Portainer** — Bouton prune dans l'UI, pas d'automatisation ### Comparaison PruneMate vs alternatives | Critère | PruneMate | docker prune | Watchtower | Cup | | :--- | :--- | :--- | :--- | :--- | | Automatisation | ✅ (cron) | ❌ (manuel) | ✅ | ✅ | | Granularité | ✅ | ❌ | ❌ | ❌ | | Whitelist | ✅ | ❌ | ❌ | ❌ | | Notifications | ✅ | ❌ | ✅ | ✅ | | Dry-run | ✅ | ❌ | ❌ | ❌ | | UI web | ❌ (logs) | ❌ | ❌ | ✅ | | Update auto | ❌ | ❌ | ✅ | ✅ | **Verdict** : PruneMate complète parfaitement [[app-watchtower]] / [[app-cup]] : l'un met à jour, l'autre nettoie. À installer en **binôme**. ### Propriétaires (ce que PruneMate remplace) - **Scripts cron artisanaux** — Qui finissent par casser - **Nettoyages manuels** — Oubliés, donc pas faits - **Solutions SaaS** — Aucun équivalent direct ## 🔐 Sécurité - ⚠️ **Le socket Docker = root sur l'hôte** : PruneMate ne supprime **que** ce que vous avez autorisé, mais un bug ou un compte compromis pourrait supprimer plus. **Montez le socket en `:ro`** (lecture seule) si possible - **Whitelist obligatoire** pour les images critiques : base de données, système, sauvegarde - **Volume prune = perte de données** : laissez `PRUNE_VOLUMES=false` par défaut - **Testez en dry-run** pendant au moins 1 semaine avant activation ## 📚 Ressources - [GitHub anoniemerd/PruneMate](https://github.com/anoniemerd/PruneMate) - [Docker prune reference](https://docs.docker.com/engine/reference/commandline/system_prune/) ## Pages Liées - [[cat-docker]] — Catégorie Docker - [[app-portainer]] — Runtime Docker - [[app-dockge]] — Compose manager - [[app-yacht]] — Templates Docker - [[app-traefik]] — Reverse proxy - [[recettes-docker-compose]] — Stacks - [[securisation-home-lab]] — Sécurité