WUD (What’s Up Docker): Mantén tus contenedores actualizados automáticamente

Publicado por


Open Source

WUD (What's Up Docker): Mantén tus contenedores actualizados automáticamente

Herramienta ligera de monitoreo y automatización de actualizaciones de contenedores para Docker, Swarm, Kubernetes y Nomad

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar WUD (What's Up Docker): Mantén tus contenedores actualizados automáticamente en el canal GENBYTE:

¿Qué es WUD (What's Up Docker): Mantén tus contenedores actualizados automáticamente?

WUD (What's Up Docker) es una herramienta ligera y proactiva de monitoreo y automatización de actualizaciones de contenedores. Escanea continuamente tus entornos de contenedores, detecta actualizaciones de imágenes en registros públicos y privados, realiza análisis de versiones semánticas y te alerta a través de tus canales de notificación favoritos o desencadena actualizaciones automáticas de contenedores de forma fluida. Soporta múltiples orquestadores: Docker standalone, Docker Swarm, Kubernetes (Deployments, StatefulSets, DaemonSets, CronJobs) y HashiCorp Nomad.

Soporte nativo para 4 orquestadores y más de 30 canales de notificación y automatización, con análisis SemVer, webhooks de registro y modo CLI headless para CI/CD.

Características principales

Motor Multi-Orquestador

Monitoriza daemons Docker locales, motores Docker remotos sobre TLS, Docker Compose, clústeres Docker Swarm, clústeres Kubernetes nativos y clústeres HashiCorp Nomad.

Integración Multi-Registro

Soporte sin configuración y autenticado para Docker Hub, GitHub Container Registry (GHCR), AWS ECR, Google GCR/GAR, Azure ACR, Quay, GitLab, Gitea, Forgejo, Codeberg, LinuxServer (LSCR) y cualquier registro OCI personalizado o auto-hospedado.

Más de 30 Triggers de Notificación y Automatización

Incluye Discord, Matrix, Mattermost, Zulip, Telegram, Slack, Signal, WhatsApp, Bark, Prowl, Home Assistant, Gotify, Ntfy, Pushover, Apprise, Webhooks, Kafka, AMQP/RabbitMQ, NATS, Opsgenie, PagerDuty, Uptime Kuma, GitHub Actions, GitLab CI, SMTP email, scripts shell y auto-actualizadores nativos Docker, Compose y Nomad.

Actualizaciones Automatizadas de Contenedores

Descarga automáticamente nuevas imágenes y recrea contenedores bajo demanda para Docker, Docker Compose y Nomad.

Webhooks de Registro

Notificaciones push de registro, incluyendo GitLab Self-Managed, que verifican inmediatamente las imágenes vigiladas coincidentes preservando etiquetas y políticas de trigger existentes.

Filtrado SemVer y de Etiquetas

Estrategias de versionado flexibles: objetivo semver (major, minor, patch), coincidencia con expresiones regulares personalizadas, versiones fijas o reglas de inclusión/exclusión de etiquetas.

Interfaz Web Interactiva y API REST

Panel web limpio y responsivo para inspeccionar estados de contenedores, desencadenar comprobaciones manuales de actualizaciones y consultar datos mediante una API REST completa.

Listo para Prometheus y Grafana

Endpoint Prometheus /metrics integrado y dashboards de Grafana preconstruidos para observabilidad.

Autenticación y RBAC de Nivel Empresarial

Control de acceso basado en roles (admin, rw, ro), gestión de usuarios respaldada por base de datos, tokens API personales e inicio de sesión único con OpenID Connect (OIDC) (Keycloak, Authentik, Authelia, etc.) o cuentas locales.

Requisitos del sistema

  • Docker Engine con acceso al socket /var/run/docker.sock
  • Node.js 24 (en imagen base Alpine Linux)
  • Puerto 3000 disponible para la interfaz web
  • Permisos para leer el socket de Docker o configuración de acceso remoto TLS
  • Para Kubernetes: RBAC en clúster o kubeconfig
  • Para Nomad: API HTTP y token ACL

Instalación con Docker Compose

Ejecución con Docker

Ejecuta el contenedor montando el socket de Docker y definiendo credenciales de administrador.

docker run -d \
–name wud \
-p 3000:3000 \
-e WUD_AUTH_ADMIN_USER="admin" \
-e WUD_AUTH_ADMIN_PASSWORD="MySecurePassword123" \
-v /var/run/docker.sock:/var/run/docker.sock \
getwud/wud:latest

Ejecución con Docker Compose

Define el servicio en un archivo docker-compose.yml con reinicio automático.

services:
whatsupdocker:
image: getwud/wud:latest
container_name: wud
ports:
– "3000:3000"
environment:
– WUD_AUTH_ADMIN_USER=admin
– WUD_AUTH_ADMIN_PASSWORD=MySecurePassword123
volumes:
– /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped

Modo CLI One-Shot (CI/CD y Cron)

Ejecuta WUD como herramienta CLI sin servidor web ni base de datos para escaneos puntuales.

# Escaneo único e impresión de estado como JSON
docker run –rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WUD_RUN_MODE=oneshot \
getwud/wud:latest watch

# Puerta de CI/CD: código de salida 1 si hay actualizaciones disponibles
docker run –rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WUD_RUN_MODE=oneshot \
getwud/wud:latest watch –update-available –fail-on-update

Acceder al proyecto

Interfaz Web

Accede a la interfaz web en http://localhost:3000 usando las credenciales definidas en WUD_AUTH_ADMIN_USER y WUD_AUTH_ADMIN_PASSWORD.

API REST

La API REST está disponible en la misma URL base (/api) y permite consultar estados, desencadenar escaneos y gestionar configuración mediante tokens API personales.

Métricas Prometheus

Endpoint de métricas expuesto en /metrics para integración con Prometheus y Grafana.

Casos de uso

  • Monitoreo automático de actualizaciones en homelabs y entornos de producción
  • Notificaciones en tiempo real a través de múltiples canales (Discord, Slack, Telegram, email, etc.)
  • Actualizaciones automáticas de contenedores en Docker, Docker Compose y Nomad
  • Integración en pipelines CI/CD como compuerta de calidad (fail-on-update)
  • Observabilidad con Prometheus y Grafana para métricas de actualizaciones
  • Gestión centralizada de actualizaciones en clústeres Kubernetes y Swarm
  • Cumplimiento de políticas de versionado SemVer personalizadas por carga de trabajo

Configuración avanzada

Configuración por Etiquetas (Docker/Compose)

Define políticas de actualización y triggers por contenedor usando etiquetas Docker.

services:
my-app:
image: myorg/myapp:1.2.0
labels:
– "wud.tag.include=^1\\.\\d+\\.\\d+$"
– "wud.tag.transform=^v(.*)$$ => $$1"
– "wud.trigger.discord.mywebhook.enabled=true"
– "wud.trigger.docker.myupdater.enabled=true"

Configuración por Anotaciones (Kubernetes)

Configura watchers y políticas en cargas de trabajo Kubernetes mediante anotaciones.

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: default
annotations:
getwud.app/watch: "true"
getwud.app/tag.include: "^1\\.\\d+\\.\\d+$"
getwud.app/tag.transform: "^v(.*)$ => $1"
getwud.app/display.icon: "mdi:kubernetes"

Autenticación de Registros Privados

Configura credenciales para registros privados mediante variables de entorno o archivos de configuración según la documentación oficial de cada registro (Docker Hub, GHCR, ECR, GCR, ACR, GitLab, Quay, OCI personalizado).

Webhooks de Registro

Habilita notificaciones push de registros (incluyendo GitLab Self-Managed) para comprobaciones inmediatas de imágenes vigiladas. Requiere configuración de endpoint webhook en el registro y WUD accesible públicamente o mediante túnel.

Gestión y mantenimiento

Healthcheck Integrado

El contenedor incluye healthcheck que verifica el endpoint /health cada 30 segundos cuando el servidor web está habilitado.

HEALTHCHECK –interval=30s –timeout=5s CMD if [[ -z ${WUD_SERVER_ENABLED} || ${WUD_SERVER_ENABLED} == 'true' ]]; then curl –fail http://localhost:${WUD_SERVER_PORT:-3000}/health || exit 1; else exit 0; fi

Actualización de WUD

Actualiza la imagen a la versión más reciente y recrea el contenedor. Usa etiquetas de versión específicas (ej. getwud/wud:v1.2.3) para despliegues reproducibles.

docker pull getwud/wud:latest
# O versión específica
docker pull getwud/wud:v1.2.3
# Recrear contenedor con nueva imagen

Logs y Depuración

Los logs se emiten en formato texto por defecto (WUD_LOG_FORMAT=text). Usa docker logs wud para inspeccionar actividad. Para depuración, ajusta nivel de log mediante variables de entorno documentadas.

docker logs -f wud

Persistencia de Base de Datos

La base de datos SQLite se almacena en el directorio de trabajo del contenedor (/home/node/app). Para persistencia entre actualizaciones, monta un volumen en ese directorio o usa la configuración de base de datos externa documentada.

Stack técnico

  • TypeScript
  • Node.js 24
  • Alpine Linux
  • Docker
  • SQLite (base de datos integrada)
  • Prometheus client
  • API REST nativa

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *