What's Up Docker (WUD) est un outil de surveillance des mises à jour d'images Docker. Il surveille les containers en cours d'exécution, interroge les registries (Docker Hub, GHCR, ECR, GCR, registries privées…) pour détecter de nouvelles versions, et déclenche des notifications ou des actions automatiques via un système de triggers configurables. WUD expose aussi des métriques Prometheus pour suivre l'état des mises à jour dans Grafana.
Informations essentielles
Origine : Communauté (fmartinou) · Licence : MIT · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Projet communautaire actif, documentation complète.
Stack par défaut
| Composant | Valeur |
|---|---|
| Langage | Node.js |
| Interface | Dashboard web + API REST |
| Watchers | Docker Engine (local ou remote) |
| Registries | Docker Hub, GHCR, ECR, GCR, registries privées |
| Triggers | Email, Slack, Telegram, webhook, Gotify, Pushover, Home Assistant… |
| Métriques | Prometheus endpoint (/metrics) |
| Port | 3000 (HTTP) |
Prérequis
| Ressource | Valeur |
|---|---|
| Docker | Engine installé |
| Accès | Socket Docker ou API Docker TLS |
| Tags images | Les images doivent avoir des tags sémantiques (semver) pour la détection |
Installation
Docker Compose (recommandé)
# docker-compose.yml
services:
wud:
image: getwud/wud:latest
container_name: wud
restart: always
ports:
- "3000:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
# Watcher Docker local
- WUD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock
# Trigger Slack (optionnel)
# - WUD_TRIGGER_SLACK_MYSUPPORT_URL=https://hooks.slack.com/services/xxx
# - WUD_TRIGGER_SLACK_MYSUPPORT_THRESHOLD=major
# Registry Docker Hub (optionnel - pour éviter le rate limiting)
# - WUD_REGISTRY_HUB_LOGIN=monlogin
# - WUD_REGISTRY_HUB_PASSWORD=monpassword
docker compose up -d
# Dashboard : http://localhost:3000
# API : http://localhost:3000/api/containers
Docker (standalone)
docker run -d \
--name wud \
--restart always \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e WUD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock \
getwud/wud:latest
Configuration des watchers
WUD peut surveiller plusieurs sources Docker :
environment:
# Hôte local
- WUD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock
# Hôte distant via TCP
- WUD_WATCHER_REMOTE_HOST=192.168.1.100
- WUD_WATCHER_REMOTE_PORT=2375
# Hôte distant TLS
- WUD_WATCHER_SECURE_HOST=192.168.1.100
- WUD_WATCHER_SECURE_PORT=2376
- WUD_WATCHER_SECURE_CAFILE=/certs/ca.pem
- WUD_WATCHER_SECURE_CERTFILE=/certs/cert.pem
- WUD_WATCHER_SECURE_KEYFILE=/certs/key.pem
Labels sur les containers
WUD utilise des labels pour personnaliser le comportement par container :
# docker-compose.yml d'une app surveillée
services:
my-app:
image: nginx:1.25
labels:
# Exclure ce container de la surveillance
- "wud.watch=false"
# Surveiller uniquement les mises à jour majeures
- "wud.tag.include=^\\d+\\.\\d+\\.\\d+$"
# Déclencher un trigger spécifique
- "wud.trigger.slack.mysupport=true"
Configuration des registries
environment:
# Docker Hub (authentifié pour éviter le rate limit)
- WUD_REGISTRY_HUB_LOGIN=monlogin
- WUD_REGISTRY_HUB_PASSWORD=montoken
# GitHub Container Registry
- WUD_REGISTRY_GHCR_TOKEN=ghp_xxxxx
# AWS ECR (PRIVATE = nom de l'instance, modifiable)
- WUD_REGISTRY_ECR_PRIVATE_ACCESSKEYID=AKIAXXXX
- WUD_REGISTRY_ECR_PRIVATE_SECRETACCESSKEY=secret
- WUD_REGISTRY_ECR_PRIVATE_REGION=eu-west-1
# Registry privée
- WUD_REGISTRY_MYREG_URL=https://registry.example.com
- WUD_REGISTRY_MYREG_LOGIN=user
- WUD_REGISTRY_MYREG_PASSWORD=password
Triggers (notifications)
environment:
# Slack
- WUD_TRIGGER_SLACK_ALERTS_URL=https://hooks.slack.com/services/xxx
- WUD_TRIGGER_SLACK_ALERTS_THRESHOLD=patch # patch, minor, major
# Email (SMTP)
- WUD_TRIGGER_SMTP_MAIL_HOST=smtp.example.com
- WUD_TRIGGER_SMTP_MAIL_PORT=587
- WUD_TRIGGER_SMTP_MAIL_USER=user@example.com
- WUD_TRIGGER_SMTP_MAIL_PASS=password
- WUD_TRIGGER_SMTP_MAIL_FROM=wud@example.com
- WUD_TRIGGER_SMTP_MAIL_TO=ops@example.com
# Webhook générique
- WUD_TRIGGER_HTTP_MYHOOK_URL=https://n8n.example.com/webhook/wud
- WUD_TRIGGER_HTTP_MYHOOK_METHOD=POST
# Telegram
- WUD_TRIGGER_TELEGRAM_NOTIF_TOKEN=bot_token
- WUD_TRIGGER_TELEGRAM_NOTIF_CHATID=123456789
Métriques Prometheus
WUD expose ses métriques sur /metrics :
# prometheus.yml
scrape_configs:
- job_name: wud
static_configs:
- targets: ['wud:3000']
metrics_path: /metrics
Métriques disponibles : wud_containers_total, wud_containers_outdated, wud_registries_requests_total, etc.
Mise à jour
docker compose pull wud && docker compose up -d wud
Troubleshooting
# Logs WUD
docker logs wud --tail 50 -f
# Vérifier les containers détectés
curl http://localhost:3000/api/containers | jq .
# Vérifier si une image a une mise à jour disponible
curl http://localhost:3000/api/containers | jq '.[] | select(.updateAvailable == true)'
# WUD ne détecte pas les updates : vérifier que les images ont des tags semver
# Les tags 'latest' ne permettent pas la comparaison de versions
Commandes API utiles
# Lister tous les containers surveillés
curl http://localhost:3000/api/containers
# Forcer un check immédiat
curl -X POST http://localhost:3000/api/containers/<id>/watch
# Voir l'état des watchers
curl http://localhost:3000/api/watchers
# Voir les triggers configurés
curl http://localhost:3000/api/triggers
Ressources
- Documentation officielle : https://getwud.github.io/wud/
- GitHub : https://github.com/getwud/wud
- Releases : https://github.com/getwud/wud/releases
- Triggers disponibles : https://getwud.github.io/wud/configuration/triggers/