Abstract violet and amber illustration representing automated Docker container updates

Watchtower

Watchtower

Watchtower est un petit conteneur compagnon qui surveille les autres conteneurs Docker d’un serveur et les met à jour tout seul : il interroge le registre de chaque image, compare les digests, récupère ce qui a changé, puis relance le conteneur avec les mêmes ports, volumes et variables d’environnement qu’au premier lancement. Pendant des années, c’était la réponse presque automatique à la question « comment arrêter de repull mes images à la main sur mon serveur homelab ». Cette réponse a changé en décembre 2025, quand l’équipe containrrr a archivé le dépôt pour de bon.

Licence : Apache License 2.0, confirmée depuis le fichier LICENSE.md du dépôt GitHub containrrr/watchtower, pas seulement d’après le badge.

À retenir : documentation officielle containrrr.dev/watchtower · GitHub containrrr/watchtower, plus de 24 600 étoiles · dernière version v1.7.1 (novembre 2023) · image Docker containrrr/watchtower (officielle, Docker Hub).

Archivé, pas supprimé. Le 17 décembre 2025, le mainteneur Simon Aronsson a fermé le dépôt : « ni @piksel ni moi ne sommes plus vraiment utilisateurs de Docker, et honnêtement, on a perdu l’intérêt, et le temps, pour maintenir le projet ». Le dépôt est désormais en lecture seule, issues et pull requests gelées, et la v1.7.1 restera la dernière version publiée. L’image continue de fonctionner exactement comme avant, rien ne casse du jour au lendemain, mais plus aucun correctif ni patch de sécurité ne viendra désormais. Les mainteneurs ont même refusé de recommander les forks communautaires apparus depuis, avertissant que certains sont « bourrés de code généré à la va-vite par IA ».

Ce que fait vraiment Watchtower

Une fois pointé vers le socket Docker, Watchtower vérifie par défaut tous les conteneurs en cours d’exécution à intervalle fixe, toutes les 24 heures sauf configuration contraire, en comparant le digest de chaque image avec ce que sert le registre à cet instant. Dès qu’un nouveau digest apparaît, Watchtower le télécharge, arrête proprement l’ancien conteneur et en relance un nouveau avec le même nom d’image, les mêmes ports, volumes, variables d’environnement et politique de redémarrage, sans le moindre docker run manuel. Le flag –cleanup, ou la variable d’environnement WATCHTOWER_CLEANUP, supprime ensuite l’image devenue obsolète au lieu de la laisser s’entasser sur le disque. Le périmètre peut être restreint à des noms de conteneurs précis, ou basculé en mode opt-in par conteneur avec le label com.centurylinklabs.watchtower.enable=true, pratique pour automatiser les mises à jour d’utilitaires secondaires tout en laissant tout ce qui est visible à un redémarrage manuel. Les notifications passent par shoutrrr, la bibliothèque maison de containrrr, qui couvre Slack, Discord, Telegram, Gotify et une longue liste d’autres services.

Un projet archivé : ce que ça change concrètement

Pas grand-chose le premier jour. Watchtower est un binaire sans état : pas de serveur de licence qui expire, pas de backend cloud qui ferme, pas de mise à jour forcée. Un conteneur déjà en place continue d’interroger et de mettre à jour les autres indéfiniment. Ce qui disparaît, c’est le filet de sécurité : si l’API d’un registre change d’une façon que Watchtower ne gère pas encore, ou qu’une dépendance révèle une faille, plus personne chez containrrr n’est là pour corriger le tir. Shoutrrr, la bibliothèque de notifications dont dépend Watchtower, reste maintenue séparément. Pour un tout nouveau déploiement en 2026, ça reste un compromis à peser face à Diun, détaillé plus bas, qui lui reste activement développé.

Avant de déployer : Watchtower a besoin d’accéder au socket Docker pour inspecter, télécharger et redémarrer les conteneurs, le même compromis « équivalent root » déjà évoqué sur les fiches Portainer et Dockge. Tout ce qui atteint ce socket peut, de fait, atteindre toute la machine hôte : à éviter sur une machine partagée ou exposée sur internet sans avoir anticipé ce risque.

Installer Watchtower avec Docker

$ docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower

Pour une installation qui survit à un redémarrage, avec nettoyage automatique et une vérification quotidienne :

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=86400

Lancez docker compose up -d et Watchtower vérifie chaque conteneur de l’hôte une fois par jour, en nettoyant les anciennes images au passage. Pour passer d’une surveillance globale à un modèle opt-in, ajoutez WATCHTOWER_LABEL_ENABLE=true au bloc environment, puis étiquetez seulement les conteneurs à mettre à jour automatiquement avec com.centurylinklabs.watchtower.enable=true dans leur propre fichier compose. Tout ce qui n’a pas le label reste tranquille, un réglage plus prudent pour un conteneur qui mérite un coup d’œil avant redémarrage, comme une base de données.

Cas d’usage en homelab

Le terrain le plus évident, c’est une pile de conteneurs à faible enjeu et faciles à remplacer : un lecteur RSS, un raccourcisseur de liens, une page de statut, tout ce où un mauvais redémarrage automatique ne coûte qu’un relancement manuel plutôt qu’une perte de données. Pointer Watchtower sur ces conteneurs-là permet de sauter la vérification hebdomadaire « qu’est-ce qui a besoin d’une mise à jour ». L’outil s’associe naturellement à un gestionnaire de stacks : déployer et modifier les fichiers compose via Dockge, ou naviguer parmi les conteneurs dans Portainer, puis laisser Watchtower gérer le pull et le redémarrage de tout ce qui est étiqueté. Comme les notifications passent par shoutrrr, une instance Watchtower peut poster dans le même canal Discord ou Slack déjà utilisé pour les autres alertes du homelab. La catégorie Docker & Containers regroupe les autres outils construits autour du même workflow.

Watchtower face à Diun

Watchtower et Diun sont constamment comparés parce qu’ils semblent résoudre le même problème, ce qui n’est pas tout à fait exact. Watchtower met à jour les conteneurs ; Diun se contente de signaler qu’une mise à jour existe et laisse le téléchargement et le redémarrage à un humain. Cette différence pèse plus lourd maintenant que Watchtower est archivé : Diun reste activement développé, avec des versions publiées jusqu’à mi-2026, quand le code de Watchtower est figé à la v1.7.1.

CatégorieWatchtowerDiun
Action sur une nouvelle imageTélécharge et redémarre automatiquementNotifie seulement, aucun redémarrage
État de maintenanceArchivé depuis décembre 2025, lecture seuleActivement maintenu
LicenceApache License 2.0MIT License
Le mieux adapté àConteneurs à faible enjeu, à l’aise avec un redémarrage sans supervisionTout ce qu’un humain doit valider avant mise à jour

Watchtower : avantages et inconvénients

  • Gratuit et open source sous licence Apache License 2.0, sans compte ni clé de licence
  • Vraiment automatique une fois les conteneurs étiquetés, sans intervention supplémentaire
  • Le flag de nettoyage intégré évite que les anciennes images remplissent l’espace disque sans qu’on s’en rende compte
  • Les notifications couvrent la plupart des services de chat et de push grâce à shoutrrr
  • Archivé depuis décembre 2025 : plus aucun correctif de bug, patch de sécurité ou nouvelle fonctionnalité à venir
  • Nécessite un accès au socket Docker, le même compromis « équivalent root » que Portainer et Dockge
  • Redémarrer un conteneur automatiquement est parfois la mauvaise décision pour tout ce qui a un état, comme une base de données, sans un étiquetage soigneux

FAQ

Watchtower est-il gratuit ?

Oui, entièrement, sous licence Apache License 2.0. Il n’y a ni palier payant, ni compte, ni clé de licence, et il n’y en a jamais eu.

Watchtower est-il encore sûr à utiliser en 2026 ?

Le conteneur tourne toujours et fait ce qui est documenté. Le problème n’est pas le fonctionnement, c’est qu’il ne reste plus personne pour corriger un futur bug ou une future faille de sécurité, ce qui pèse un peu plus lourd à mesure que la date d’archivage s’éloigne.

Watchtower met-il à jour tous les conteneurs par défaut ?

Oui, sauf s’il est restreint à des conteneurs nommés ou basculé en modèle opt-in avec WATCHTOWER_LABEL_ENABLE=true, auquel cas seuls les conteneurs portant le label com.centurylinklabs.watchtower.enable=true sont concernés.

Watchtower ou Diun pour une nouvelle installation ?

Pour tout ce où un redémarrage sans supervision ne pose vraiment aucun problème, Watchtower fonctionne toujours exactement comme avant l’archivage. Pour tout ce qu’un humain doit valider avant une mise à jour, ou pour une installation qui doit continuer à recevoir des correctifs, Diun est l’option activement maintenue.

Watchtower fait toujours ce pour quoi il a été conçu : des mises à jour de conteneurs sans supervision, sans le moindre script. Ce qui a changé en décembre 2025, c’est le filet de sécurité derrière l’outil, pas le conteneur lui-même. Pour une stack déjà étiquetée et qui tourne, rien n’oblige à tout arracher dans l’urgence. Pour un nouveau déploiement, mieux vaut lire l’avis d’archivage et se demander si l’approche notify-only de Diun conviendrait mieux sur la durée. Et pour tout ce qui a un état à préserver, une tâche Duplicati programmée ou la base de données d’un autre service, mieux vaut garder la main plutôt que de laisser Watchtower décider seul du moment du redémarrage. Notre guide de démarrage homelab pour débutants et la catégorie Docker & Containers couvrent le reste de la pile avec laquelle Watchtower cohabite d’habitude.