UI & Management

What's Up Docker (WUD)

Surveillance des mises à jour d'images Docker en temps réel - watchers, registries, triggers (email, Slack, webhook). Prometheus/Grafana, GHCR, ECR, DockerHub. MIT.

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

ComposantValeur
LangageNode.js
InterfaceDashboard web + API REST
WatchersDocker Engine (local ou remote)
RegistriesDocker Hub, GHCR, ECR, GCR, registries privées
TriggersEmail, Slack, Telegram, webhook, Gotify, Pushover, Home Assistant…
MétriquesPrometheus endpoint (/metrics)
Port3000 (HTTP)

Prérequis

RessourceValeur
DockerEngine installé
AccèsSocket Docker ou API Docker TLS
Tags imagesLes 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic