0 Votes

Code source wiki de Watchtower

Modifié par john le 2026/09/20 18:43

Afficher les derniers auteurs
1 = Watchtower =
2
3 Mise à jour automatique des images Docker des conteneurs de la machine.
4
5 == Rôle ==
6
7 Watchtower surveille les registres des images utilisées par les conteneurs en cours d'exécution, télécharge les nouvelles versions et recrée les conteneurs avec la configuration présente dans Docker au moment de la mise à jour (variables, volumes, réseaux, labels). Il ne lit pas les fichiers Compose et ne connaît pas les stacks Portainer : une image épinglée sur un tag fixe n'est jamais mise à jour, seuls les tags mouvants (##latest##, ##stable##) le sont.
8
9 == Fork utilisé ==
10
11 Le projet d'origine ##containrrr/watchtower## est archivé depuis décembre 2025. L'image utilisée est le fork maintenu ##nickfedor/watchtower##, qui conserve les variables ##WATCHTOWER_*## et l'espace de noms de labels ##com.centurylinklabs.watchtower.*##.
12
13 Documentation : [[watchtower.nickfedor.com>>https://watchtower.nickfedor.com/]]
14
15 == Stack ==
16
17 {{code language="yaml"}}
18 services:
19 watchtower:
20 image: nickfedor/watchtower:latest
21 container_name: watchtower
22 restart: unless-stopped
23 environment:
24 - TZ=<FUSEAU_HORAIRE>
25 - WATCHTOWER_SCHEDULE=0 0 5 * * *
26 - WATCHTOWER_CLEANUP=true
27 volumes:
28 - /var/run/docker.sock:/var/run/docker.sock
29 {{/code}}
30
31 * ##WATCHTOWER_SCHEDULE## utilise un cron à six champs : le premier est celui des secondes. La valeur ci-dessus déclenche un passage à 5 h 00.
32 * ##WATCHTOWER_CLEANUP## supprime l'image précédente après recréation du conteneur, sinon les anciennes couches s'accumulent.
33 * Aucune API HTTP n'est activée et aucune notification n'est configurée côté Watchtower : le suivi des mises à jour est assuré par un workflow n8n qui interroge docker-socket-proxy en lecture seule toutes les dix minutes et notifie sur Telegram.
34
35 {{warning}}
36 Le montage de ##/var/run/docker.sock## donne à ce conteneur un contrôle total de l'hôte. Il ne doit être ni publié, ni proxifié, ni placé sur un réseau partagé avec des services exposés.
37 {{/warning}}
38
39 == Options disponibles, non utilisées ici ==
40
41 |=Variable|=Effet|=Statut
42 |WATCHTOWER_POLL_INTERVAL|Intervalle de scrutation en secondes (300 par défaut)|Remplacé par un cron
43 |WATCHTOWER_ROLLING_RESTART|Met à jour les conteneurs un par un|Incompatible avec les dépendances, voir ci-dessous
44 |WATCHTOWER_MONITOR_ONLY|Détecte et signale sans mettre à jour|Rôle tenu par n8n
45 |WATCHTOWER_NO_PULL|Ne consulte que le cache d'images local|Utile pour des images construites localement
46 |WATCHTOWER_NO_RESTART|Recrée les conteneurs sans les démarrer|Pour un cycle de vie géré par systemd
47 |WATCHTOWER_LABEL_ENABLE|Inverse la logique : seuls les conteneurs marqués enable=true sont suivis|La liste d'exclusions est plus courte que la liste d'inclusions
48 |WATCHTOWER_DISABLE_CONTAINERS|Exclusion par nom de conteneur, expressions régulières acceptées|Exclusions faites par label
49 |WATCHTOWER_ENABLE_CONTAINERS_BY_LABEL|Restreint le suivi à des paires label=valeur|
50 |WATCHTOWER_SKIP_IMAGE_NAMES|Exclusion par nom d'image, tag inclus|
51 |WATCHTOWER_SCOPE|Cloisonne plusieurs instances de Watchtower par label de portée|Une seule instance par machine
52 |WATCHTOWER_INCLUDE_STOPPED|Inclut les conteneurs créés ou sortis|
53 |WATCHTOWER_REVIVE_STOPPED|Redémarre les conteneurs arrêtés après mise à jour, exige include-stopped|Laisserait repartir les conteneurs volontairement arrêtés
54 |WATCHTOWER_INCLUDE_RESTARTING|Inclut les conteneurs en état restarting|
55 |WATCHTOWER_REMOVE_VOLUMES|Supprime les volumes anonymes lors de la recréation, les volumes nommés ne sont pas touchés|
56 |WATCHTOWER_TIMEOUT|Délai avant arrêt forcé d'un conteneur, 30s par défaut|
57 |WATCHTOWER_DISK_SPACE_MAX|Bloque la session de mise à jour au-delà d'un volume d'images donné|
58 |WATCHTOWER_DISK_SPACE_WARN|Seuil d'avertissement, en taille ou en pourcentage du maximum|
59 |WATCHTOWER_USE_COMPOSE_DEPENDS_ON|Respecte l'ordre imposé par depends_on, actif par défaut|Laissé à sa valeur par défaut
60 |WATCHTOWER_LABEL_TAKE_PRECEDENCE|Donne la priorité aux labels sur les options globales|
61 |WATCHTOWER_HTTP_API_UPDATE|Expose un point d'entrée de mise à jour à la demande|API non activée
62 |WATCHTOWER_HTTP_API_TOKEN|Jeton d'authentification de l'API|API non activée
63 |WATCHTOWER_HTTP_API_METRICS|Expose des métriques Prometheus|API non activée
64 |WATCHTOWER_NOTIFICATION_URL|Notifications Shoutrrr (Telegram, courriel, Gotify…)|Notifications assurées par n8n
65 |WATCHTOWER_EPHEMERAL_SELF_UPDATE|Auto-mise à jour par conteneur orchestrateur éphémère|Expérimental
66
67 {{warning}}
68 ##--rolling-restart## ne fonctionne pas dès qu'un conteneur suivi possède une dépendance : ##depends_on## Compose, label ##depends-on##, lien Docker ou ##network_mode## pointant vers un autre conteneur. Le fork refuse alors de démarrer. L'option a été retirée de la stack pour cette raison.
69 {{/warning}}
70
71 == Exclusions ==
72
73 Les conteneurs portant le label ##com.centurylinklabs.watchtower.enable=false## sont ignorés, sans autre configuration côté Watchtower.
74
75 |=Conteneur|=Raison de l'exclusion
76 |Reverse proxy|Toute la chaîne d'accès aux services en dépend, une régression coupe l'accès distant à la machine
77 |Authentification unique|Un changement de schéma de configuration bloque l'authentification de tous les services protégés
78 |Détection et bannissement|Configuration sensible (acquisition, profils, bouncers) susceptible d'évoluer d'une version à l'autre
79 |Base de données applicative|Un changement de version majeure du moteur peut déclencher une migration de schéma irréversible
80
81 Déclaration dans la stack du service concerné :
82
83 {{code language="yaml"}}
84 labels:
85 - com.centurylinklabs.watchtower.enable=false
86 {{/code}}
87
88 Ces quatre conteneurs se mettent à jour manuellement, après lecture des notes de version, en dehors des fenêtres de sauvegarde.
89
90 === Autres labels reconnus ===
91
92 |=Label|=Effet
93 |com.centurylinklabs.watchtower.enable|true ou false, inclut ou exclut le conteneur
94 |com.centurylinklabs.watchtower.monitor-only|Détecte la nouvelle image sans recréer le conteneur
95 |com.centurylinklabs.watchtower.no-pull|N'interroge pas le registre pour ce conteneur
96 |com.centurylinklabs.watchtower.scope|Rattache le conteneur à une instance de Watchtower donnée
97 |com.centurylinklabs.watchtower.depends-on|Ordre de mise à jour explicite, indépendant de Compose
98 |com.centurylinklabs.watchtower.lifecycle.pre-update-command|Commande exécutée dans le conteneur avant l'arrêt
99 |com.centurylinklabs.watchtower.lifecycle.post-update-command|Commande exécutée après le démarrage de la nouvelle instance
100
101 == Commandes utiles ==
102
103 {{code language="bash"}}
104 # Journaux du dernier passage
105 docker logs --tail 100 watchtower
106
107 # Vérifier la planification prise en compte au démarrage
108 docker logs watchtower | grep -i -e schedule -e "next run"
109
110 # Conteneurs actuellement exclus
111 docker ps --filter "label=com.centurylinklabs.watchtower.enable=false"
112
113 # Vérifier les labels Watchtower d'un conteneur
114 docker inspect <NOM_CONTENEUR> | grep -i watchtower
115
116 # Passage immédiat, sans toucher au conteneur planifié
117 docker run --rm \
118 -v /var/run/docker.sock:/var/run/docker.sock \
119 nickfedor/watchtower --run-once --cleanup <NOM_CONTENEUR>
120
121 # Contrôle à blanc : signale les images obsolètes sans rien recréer
122 docker run --rm \
123 -v /var/run/docker.sock:/var/run/docker.sock \
124 nickfedor/watchtower --run-once --monitor-only
125
126 # Prise en compte d'un changement de variable : redéployer la stack
127 {{/code}}
128
129 {{info}}
130 La sauvegarde nocturne est déclenchée à 3 h 30, Watchtower à 5 h. Une mise à jour défaillante est donc toujours précédée d'un point de restauration de la nuit même.
131 {{/info}}