Tutoriel

Watchtower vs Diun : mises à jour Docker sur VPS sans surprise

Déploiement8 min de lecture4 étapes

Les images Docker vieillissent en silence : des correctifs de sécurité s'accumulent, des dépendances sont affectées, et rien ne vous prévient. Sans processus, on patche soit jamais, soit à la main le jour d'un incident. Watchtower et Diun répondent à ce problème avec deux philosophies opposées — l'une agit pour vous, l'autre vous informe. Ce comparatif tranche le choix selon votre contexte, et tient compte d'un fait récent : Watchtower a été archivé par ses mainteneurs fin 2025.

Sommaire· Le problème : des images Docker qui vieillissent en silence1/10
  1. 01Le problème : des images Docker qui vieillissent en silence
  2. 02Watchtower : mise à jour automatique, mais archivé depuis fin 2025
  3. 03Watchtower en mode notify-only
  4. 04Diun : alertes seulement, vous gardez la main
  5. 05Quand choisir l'un ou l'autre
  6. 06Installer Diun sur un VPS : exemple pratique
  7. 07Déployer Diun sur votre VPS
  8. 08Aller plus loin : pinner les versions et garder le contrôle
  9. 09Diun surveille aussi les images arrêtées
  10. 10Ce que retenir de ce comparatif

Le problème : des images Docker qui vieillissent en silence

Sur un VPS en production, les conteneurs Docker tournent souvent pendant des semaines ou des mois sans être mis à jour. Ce n'est pas de la négligence : il n'y a simplement aucun signal. L'image nginx:latest que vous avez tirée en janvier est toujours là en septembre, avec les vulnérabilités qui ont été corrigées entre-temps.

Le coût de ne rien faire est documenté : les CVE non patchées dans les images de base sont l'un des vecteurs d'entrée les plus courants sur des infrastructures Docker auto-hébergées. La mise à jour manuelle — se connecter au VPS, faire docker pull, recréer le conteneur — est la pratique par défaut. Elle est aussi la moins fiable : on reporte, on oublie, on ne fait que les services « importants ».

Deux outils ont émergé pour structurer ce processus : Watchtower, qui automatise la mise à jour elle-même, et Diun (Docker Image Update Notifier), qui envoie une alerte quand une nouvelle image est disponible et laisse l'action à votre pipeline. Ils ne font pas la même chose, et confondre les deux philosophies peut coûter une panne de production.

Watchtower : mise à jour automatique, mais archivé depuis fin 2025

Watchtower surveille vos conteneurs en cours d'exécution, interroge les registries à intervalles réguliers, et dès qu'une nouvelle image est disponible, il tire le nouveau tag, arrête le conteneur existant et le recrée avec les mêmes options — volumes, variables d'environnement, réseau. Tout cela sans intervention humaine.

Ce qu'il fait concrètement :

- Polling configurable par durée (toutes les N secondes) ou par expression cron
- Prise en charge des registries privés avec authentification
- Mode WATCHTOWER_NOTIFICATIONS pour recevoir des alertes sans effectuer de mise à jour
- Filtrage par label Docker pour inclure ou exclure certains conteneurs

Le risque en production est réel. Si une image :latest introduit un changement d'API incompatible ou un comportement cassant, Watchtower recréera votre conteneur avec cette image — sans test, sans fenêtre de maintenance, potentiellement à 3h du matin. Le conteneur redémarre avec la mauvaise version, et la découverte se fait via une alerte de monitoring ou un appel de support.

Point de situation important : le dépôt GitHub de Watchtower a été archivé par ses mainteneurs fin 2025. Il est désormais en lecture seule. La dernière version publiée est la v1.7.1. Le projet reste fonctionnel et les images Docker existantes continuent de tourner, mais il ne recevra plus de correctifs de sécurité, de nouvelles fonctionnalités ni de support pour les versions futures de Docker. Pour un outil dont le rôle est de mettre à jour vos images, l'ironie n'est pas négligeable.

Pour les environnements de développement ou les homelabs où la commodité prime sur la stabilité, Watchtower reste un choix légitime. Pour la production, son archival renforce le constat qui existait déjà : la mise à jour automatique sans pipeline de validation est un risque opérationnel.

Watchtower en mode notify-only

Si vous utilisez déjà Watchtower et souhaitez désactiver les mises à jour automatiques tout en conservant les notifications, passez la variable WATCHTOWER_MONITOR_ONLY=true. Le conteneur surveille les images et envoie des alertes, mais n'agit pas. C'est une configuration de transition utile si vous migrez vers Diun.

Diun : alertes seulement, vous gardez la main

Diun (Docker Image Update Notifier) prend le problème par l'autre bout : il surveille vos images sur les registries et vous envoie une notification quand une nouvelle version est disponible. Il n'agit pas. Vos conteneurs continuent de tourner inchangés — la décision de mettre à jour reste dans votre pipeline.

Licencié sous MIT, Diun est activement développé : la version la version actuelle a été publiée récemment. Le projet couvre un large spectre de sources (Docker, Containerd, Kubernetes, Swarm, Nomad, Dockerfile, fichier de configuration) et de canaux de notification.

Canaux de notification supportés :

- Email, Slack, Telegram, ntfy, Gotify
- Microsoft Teams, Discord, webhooks génériques
- Healthchecks.io pour surveiller le watcher lui-même

Ce que Diun ne fait pas :

- Il ne tire jamais d'image
- Il ne redémarre jamais un conteneur
- Il ne modifie aucun fichier de configuration

Cette philosophie est précisément ce qui le rend adapté à la production. Quand Diun vous signale qu'une nouvelle image est disponible, vous pouvez déclencher votre pipeline de déploiement habituel — avec ses tests, sa sauvegarde préalable et sa fenêtre de maintenance. Vous restez dans une posture maîtrisée.

Diun est également compatible avec les stacks gérées par des outils comme Portainer, Coolify ou Dokploy : il observe les images sans interférer avec leur orchestration.

Quand choisir l'un ou l'autre

Faites défiler le tableau

ContexteWatchtowerDiun
Environnement de dev / stagingAcceptable (commodité)Surdimensionné
Prod avec images taguées (pas :latest)À éviter — recrée sur le même tagRecommandé
Prod avec dépendances d'API tiercesRisqué sans test préalableRecommandé
Homelab / services personnelsPratiqueCorrect si alertes actives
Stack gérée par Coolify, Dokploy, PortainerConflit possible avec l'orchestrateurRecommandé
Projet sans pipeline de déploiementAcceptable avec monitor-onlyRecommandé avec ntfy/Slack

Installer Diun sur un VPS : exemple pratique

L'installation de Diun se fait en quelques minutes avec Docker Compose. L'exemple suivant surveille tous les conteneurs du socket Docker local et envoie une notification via ntfy.

Déployer Diun sur votre VPS

  1. Créer le fichier docker-compose.yml

    Créez un répertoire dédié et le fichier Compose :

    mkdir -p /opt/diun && cd /opt/diun

    Contenu du fichier docker-compose.yml :

    services:
      diun:
        image: crazymax/diun:latest
        restart: unless-stopped
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - ./data:/data
        environment:
          - TZ=Europe/Paris
          - LOG_LEVEL=info
          - DIUN_WATCH_WORKERS=20
          - DIUN_WATCH_SCHEDULE=0 */6 * * *
          - DIUN_PROVIDERS_DOCKER=true
          - DIUN_PROVIDERS_DOCKER_WATCHSTOPPED=true
          - DIUN_NOTIF_NTFY_ENDPOINT=https://ntfy.example.com
          - DIUN_NOTIF_NTFY_TOPIC=diun-updates

    Remplacez ntfy.example.com par l'URL de votre instance ntfy (auto-hébergée sur le même VPS ou externe).

  2. Activer la surveillance par label (optionnel)

    Par défaut, Diun surveille tous les conteneurs. Pour un contrôle plus fin, passez en mode label :

    - DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=false

    Puis ajoutez le label sur les conteneurs à surveiller :

    labels:
      - "diun.enable=true"

    Cette approche est utile pour exclure les conteneurs systèmes (proxies, bases de données) des notifications, et ne surveiller que les apps applicatives.

  3. Démarrer et vérifier

    docker compose up -d
    docker compose logs -f diun

    Diun effectue une première passe de découverte au démarrage. Les logs confirment les images détectées et le prochain cycle de surveillance. Une notification de test peut être déclenchée avec :

    docker compose exec diun diun notif test
  4. Déclencher la mise à jour depuis votre pipeline

    Quand Diun envoie une notification, la mise à jour ne doit pas se faire à la main. Le bon réflexe est de déclencher votre pipeline habituel — un webhook Gitea, une action GitHub, ou un job Woodpecker qui tire la nouvelle image, exécute vos tests et recrée le conteneur.

    Si vous n'avez pas encore de pipeline, le minimum viable est un script appelé depuis le webhook ntfy :

    #!/bin/bash
    # update-container.sh <nom_du_conteneur>
    CONTAINER=$1
    docker compose -f /opt/${CONTAINER}/docker-compose.yml pull
    docker compose -f /opt/${CONTAINER}/docker-compose.yml up -d

    L'essentiel est que la mise à jour soit déclenchée intentionnellement, pas silencieuse.

Aller plus loin : pinner les versions et garder le contrôle

La mise à jour automatique sans tag fixe est le vrai risque — qu'on utilise Watchtower ou un pipeline déclenché par Diun. Le tag :latest est un alias qui peut pointer vers n'importe quelle version publiée par le mainteneur. Une mise à jour de :latest peut introduire un changement cassant sans que rien dans votre configuration ne change.

La pratique recommandée par la communauté Docker :

Pinnez les versions dans vos fichiers docker-compose.yml en production :

# À éviter en prod
image: nginx:latest

# Préférer un tag de version
image: nginx:1.27

Réservez :latest aux environnements de développement et de staging, où une régression est détectable avant de toucher la production.

Avec des images versionnées, Diun détecte les nouvelles releases (les nouveaux tags) et vous notifie — vous choisissez la version vers laquelle migrer, vous mettez à jour votre docker-compose.yml, et vous déployez en maîtrise. C'est ce que la checklist de production Docker Compose appelle « déclarer explicitement vos dépendances ».

Si vous gérez plusieurs conteneurs sur un même VPS, un outil de monitoring des logs comme Dozzle complète utilement Diun : Diun surveille les images en amont, Dozzle observe les logs des conteneurs après mise à jour.

Diun surveille aussi les images arrêtées

Par défaut, Diun ignore les conteneurs arrêtés (stopped). Activez DIUN_PROVIDERS_DOCKER_WATCHSTOPPED=true pour surveiller aussi les images de conteneurs en pause ou arrêtés — utile si vous gérez des services batch ou des conteneurs de maintenance que vous redémarrez périodiquement.

Ce que retenir de ce comparatif

  • Watchtower agit sans vous demander votre avis — utile en dev, risqué en prod, et archivé depuis fin 2025.
  • Diun informe sans agir — compatible avec tout pipeline de déploiement existant et activement maintenu (la version actuelle).
  • Pour la production, Diun couplé à votre pipeline est le choix le plus robuste.
  • Pinner les versions dans docker-compose.yml reste la base — ni Watchtower ni Diun ne remplacent une gestion explicite des tags.
  • Si vous avez Watchtower en place, le mode WATCHTOWER_MONITOR_ONLY=true est une transition immédiate vers un comportement plus sûr.

Mettez votre stack Docker en orbite sur un VPS ServOrbit

Accès root, SSD NVMe, IPv4 dédiée : les conditions pour reproduire ces exemples à l'identique. Diun et votre pipeline de déploiement tournent sur la même machine que vos conteneurs applicatifs.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet