Surveiller les mises à jour des conteneurs Docker avec Watchtower
Watchtower

Surveiller les mises à jour des conteneurs Docker avec Watchtower

Table des matières

Watchtower est un outil simple et très pratique qui permet de mettre à jour automatiquement les images Docker de vos conteneurs. Idéal si vous souhaitez garder vos services à jour de manière automatisée. Il est aussi possible d'être simplement notifié lorsqu'une mise à jour est disponible.

Installation de Watchtower

Par défaut il vérifie si des mises à jour sont disponibles toutes les 24 heures. Mais vous pouvez configurer un horaire précis avec cron. Par exemple pour vérifier les mises à jour tous les jours à 3h du matin :

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE=0 0 3 * * *
      - WATCHTOWER_CLEANUP=true
  • WATCHTOWER_CLEANUP : Supprime les anciennes images Docker pour libérer de l’espace disque. (true/false)

Exclure un conteneur des mises à jour

Pour empêcher Watchtower de surveiller un conteneur particulier, vous pouvez ajouter un label com.centurylinklabs.watchtower.enable avec la valeur false à ce conteneur :

services:
  nginx:
    image: nginx:latest
    labels:
      "com.centurylinklabs.watchtower.enable": "false"

Recevoir des notifications de mise à jour

Il est possible d'être notifié chaque fois qu’un conteneur est mis à jour. Les notifications peuvent être envoyées par divers canaux comme Discord, Gotify, Slack ou encore par mail.

Configuration des notifications

Pour configurer les notifications, vous devez définir certaines variables d'environnement dans le fichier docker-compose.yml. Voici les principales options :

  • WATCHTOWER_NOTIFICATIONS : Quels services de notification utiliser.
  • WATCHTOWER_NOTIFICATION_URL : L'URL du service de notification.
  • WATCHTOWER_NOTIFICATION_LEVEL : Définir le niveau de log pour les notifications.

Exemple de configuration pour Discord

Pour envoyer des notifications dans un salon Discord, vous devez créer un webhook Discord et l'ajouter à votre configuration :

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL="discord://token@id"

Exemple de webhook Discord complet :

https://discord.com/api/webhooks/1366048473958584370/iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i
  • id = 1366048473958584370
  • token = iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i

Donc la valeur pour WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL donnera : discord://token@id

      - WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL="discord://iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i@1366048473958584370"

Avertissement et mode "monitor-only"

Bien que Watchtower soit pratique, il y a des risques à automatiser les mises à jour, ça peut introduire des bugs ou des changements inattendus.

Pour surveiller les mises à jour sans appliquer les changements, vous pouvez activer le mode monitor-only. Ce mode permet à Watchtower de vérifier les nouvelles images mais sans mettre à jour les conteneurs.

L'image est tout de même récupérée en raison des limitations de l'API Docker.

Ce mode peut être activé via la variable d'environnement WATCHTOWER_MONITOR_ONLY=true.

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_MONITOR_ONLY=true

Une autre façon d’activer ce mode pour un conteneur spécifique est d’ajouter le label com.centurylinklabs.watchtower.monitor-only avec la valeur true dans la configuration du conteneur :

services:
  mon_service:
    image: mon_image:latest
    labels:
      "com.centurylinklabs.watchtower.monitor-only": "true"

Lancer Watchtower manuellement pour mettre à jour un conteneur

Il est également possible de lancer Watchtower manuellement pour mettre à jour un conteneur spécifique à la demande, sans attendre la planification automatique. Cela peut être utile si vous souhaitez forcer une mise à jour immédiate sans modifier la configuration ou attendre l'heure prévue.

Tous les conteneurs Docker :

Pour ça vous pouvez utiliser l'option --run-once qui indique à Watchtower de ne procéder qu'à un seul cycle de vérification. Si vous ajoutez l'option --rm, le conteneur Watchtower sera automatiquement supprimé après l'exécution de la mise à jour, vous évitant ainsi de laisser le conteneur à l'arrêt inutilement une fois qu'il a terminé.

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once

Un contenneur spécifique

Si vous souhaitez cibler un conteneur spécifique, vous pouvez ajouter son nom à la fin de la commande :

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once nom_du_conteneur

Automatiser ou être alerté, que choisirez-vous ?

Watchtower est un outil excellent pour automatiser la gestion de vos mises à jour Docker, mais il peut être important de garder un certain contrôle sur les mises à jour automatiques en fonction de l'environnement et son besoin en disponibilité.
Si vous préférez être informé sans risquer de casse, utilisez le mode "monitor-only" pour recevoir des alertes sans intervention automatique.

Komi

Passionnée par le self-hosting et tout ce qui gravite autour, je partagerais ici mes découvertes et guides pour aider chacun à se sentir à l’aise dans cet univers.