Files
wiki/Catalogue-Self-Hosted/apps/app-prunemate.md
T
2026-06-09 18:40:21 +02:00

5.5 KiB


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
License MIT
Langage Go
Étoiles GitHub 459
Dernière MAJ 2026-04
Catégorie cat-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

# 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

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

Pages Liées