Watchtower: Automatización de actualizaciones de contenedores Docker
Herramienta para actualizar automáticamente imágenes base de contenedores Docker en entornos locales y de desarrollo
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar Watchtower: Automatización de actualizaciones de contenedores Docker en el canal GENBYTE:
¿Qué es Watchtower: Automatización de actualizaciones de contenedores Docker?
Watchtower es una utilidad escrita en Go que monitoriza los contenedores Docker en ejecución y los actualiza automáticamente cuando se detecta una nueva versión de su imagen en el registro. El proyecto está diseñado para entornos domésticos, laboratorios caseros, centros multimedia y entornos de desarrollo local. Los mantenedores advierten explícitamente que no se recomienda su uso en entornos comerciales o de producción, sugiriendo alternativas como Kubernetes, MicroK8s o k3s para esos casos. El proyecto ha sido archivado y ya no recibe mantenimiento activo, según el aviso oficial en su repositorio.
Características principales
Actualización automática de imágenes
Detecta nuevas versiones de imágenes en Docker Hub o registros privados y actualiza los contenedores en ejecución.
Preservación de configuración
Reinicia los contenedores con las mismas opciones, volúmenes, redes y variables de entorno utilizadas en el despliegue inicial.
Soporte para registros privados
Permite autenticarse en registros privados mediante credenciales de Docker para actualizar imágenes no públicas.
Programación flexible
Ofrece intervalos de comprobación configurables y soporte para programaciones cron personalizadas.
Notificaciones integradas
Incluye soporte para notificaciones por correo electrónico, Slack, Discord, Gotify, Microsoft Teams, Pushover, Telegram y otros servicios.
API HTTP y métricas
Expone una API HTTP opcional con métricas Prometheus y endpoints de salud para monitorización.
Etiquetas de control
Permite incluir o excluir contenedores mediante etiquetas Docker (labels) para granularidad en la actualización.
Requisitos del sistema
- Docker Engine instalado y en ejecución
- Acceso al socket de Docker (/var/run/docker.sock) para gestionar contenedores
- Conectividad de red hacia los registros de imágenes (Docker Hub o privados)
- Permisos para montar el socket de Docker en el contenedor de Watchtower
Instalación con Docker Compose
Despliegue rápido con Docker CLI
Ejecuta Watchtower como contenedor montando el socket de Docker. Este método es el documentado en el inicio rápido oficial.
–name watchtower \
–volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
Despliegue con Docker Compose (desarrollo)
El repositorio incluye un archivo docker-compose.yml de ejemplo para desarrollo con métricas, Prometheus, Grafana y contenedores de prueba. No está destinado a producción.
services:
watchtower:
container_name: watchtower
build:
context: ./
dockerfile: dockerfiles/Dockerfile.dev-self-contained
volumes:
– /var/run/docker.sock:/var/run/docker.sock:ro
ports:
– 8080:8080
command: –interval 10 –http-api-metrics –http-api-token demotoken –debug prometheus grafana parent child
prometheus:
container_name: prometheus
image: prom/prometheus
volumes:
– ./prometheus/:/etc/prometheus/
– prometheus:/prometheus/
ports:
– 9090:9090
grafana:
container_name: grafana
image: grafana/grafana
ports:
– 3000:3000
environment:
GF_INSTALL_PLUGINS: grafana-clock-panel,grafana-simple-json-datasource
volumes:
– grafana:/var/lib/grafana
– ./grafana:/etc/grafana/provisioning
parent:
image: nginx
container_name: parent
child:
image: nginx:alpine
labels:
com.centurylinklabs.watchtower.depends-on: parent
container_name: child
volumes:
prometheus: {}
grafana: {}
Acceder al proyecto
API HTTP y métricas (opcional)
Si se habilita con –http-api-metrics y –http-api-token, la API queda accesible en el puerto 8080 del contenedor. Requiere token de autenticación.
Prometheus (en compose de desarrollo)
Interfaz de Prometheus disponible en http://localhost:9090 cuando se usa el docker-compose.yml de desarrollo incluido.
Grafana (en compose de desarrollo)
Interfaz de Grafana disponible en http://localhost:3000 con el docker-compose.yml de desarrollo.
Casos de uso
- Laboratorios caseros (homelabs) con múltiples servicios contenedorizados
- Centros multimedia basados en Docker (Plex, Jellyfin, *arr stack)
- Entornos de desarrollo local donde se requieren imágenes base actualizadas
- Servidores personales con contenedores de utilidades y servicios autohospedados
- Entornos de prueba donde la actualización automática de imágenes base ahorra mantenimiento manual
Configuración avanzada
Configuración de intervalo y programación
Define la frecuencia de comprobación en segundos con –interval o usa –schedule con expresión cron para horarios específicos.
# o
watchtower –schedule "0 0 4 * * *"
Limpieza de imágenes antiguas
Habilita la eliminación de imágenes antiguas tras la actualización para liberar espacio en disco.
Inclusión y exclusión por etiquetas
Controla qué contenedores monitoriza usando etiquetas Docker. Por defecto, Watchtower monitoriza todos los contenedores.
watchtower –label-enable
# Excluir contenedores con label com.centurylinklabs.watchtower.enable=false
watchtower –label-enable=false
Notificaciones
Configura notificaciones mediante variables de entorno o flags para recibir avisos de actualizaciones. Consulta la documentación oficial para cada proveedor.
watchtower –notification-email-from … –notification-email-to … –notification-email-server …
Registros privados
Proporciona credenciales de registro mediante archivo de configuración de Docker (config.json) montado en el contenedor.
Gestión y mantenimiento
Actualización de Watchtower
Al ser un contenedor, actualízalo extrayendo la imagen más reciente y recreando el contenedor.
# Recrear contenedor con misma configuración
Visualización de logs
Revisa los logs del contenedor para auditar actualizaciones y detectar errores.
Ejecución única (one-shot)
Ejecuta Watchtower una sola vez sin demonio para actualizaciones puntuales o en pipelines CI/CD.
Stack técnico
- Go (Golang)
- Docker API
- Docker Compose (para desarrollo)
- Prometheus (métricas opcionales)
- Grafana (visualización opcional)
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/containrrr/watchtower
- Documentación oficial: https://containrrr.dev/watchtower/
- Imagen en Docker Hub: https://hub.docker.com/r/containrrr/watchtower
- Anuncio de archivo del proyecto: https://github.com/containrrr/watchtower/discussions/2135
- Licencia Apache 2.0: https://www.apache.org/licenses/LICENSE-2.0
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
