Watchtower

Watchtower es un contenedor que se ejecuta en segundo plano y se encarga de vigilar tus contenedores Docker y actualizarlos automáticamente cuando detecta que hay una nueva imagen disponible en el registry (Docker Hub, GitHub Container Registry, etc.).
En otras palabras: es un “autoupdater” para Docker.
Funcionamiento
Watchtower actúa sobre todo el host (todos los stacks) compartiendo el daemon Docker. Para que actualice contenedores añade la label com.centurylinklabs.watchtower.enable=true en esos servicios dentro de sus propios docker-compose.yml.
labels:
- com.centurylinklabs.watchtower.enable=true
-
Watchtower comprueba periódicamente las imágenes de los contenedores que tengas corriendo.
-
Si encuentra una versión más reciente, la descarga.
-
Para cada contenedor afectado:
-
Lo detiene,
-
Lo recrea usando la nueva imagen,
-
Lo arranca de nuevo con las mismas opciones (puertos, volúmenes, variables de entorno, etc.) que tenía antes.
-
Enlaces
Requisitos
- Docker instalado siguiendo los pasos de instalar
Portainer configurado siguiendo los pasos deinstalar portainer.NGINX Proxy manager siguiendo los pasos de instalarNGINX Proxy Manager. (opcional)Traefik configurado siguiendo los pasos deinstalar Traefik. (opcional)
Imagen
Repositorio de Docker Hub: containrrr/watchtower - Docker Image | Docker Hub
Portainer- Nuevo «stack»
Add a new stack – Portainer Documentation
Web editor
En Portainer «Stack» agregamos nuevo usando el editor WEB pegando el contenido del fichero «docker-compose.yml» y el contenido del fichero de variables
Fichero de variables
environment:
- TZ=Europe/Madrid
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=noreply@dominio.com
- WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@ictiberia.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.office365.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=usuario@dominio.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=<<tu_password_o_app_password>>
# opcional: envío de informe aunque no haya updates
- WATCHTOWER_NOTIFICATION_REPORT=true
Fichero docker-compose
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
environment:
- TZ=Europe/Madrid
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
command:
# Solo contenedores con label com.centurylinklabs.watchtower.enable=true
- --label-enable
# Limpia imágenes antiguas tras actualizar
- --cleanup
# Ejecuta cada noche a las 03:30 (hora del contenedor → usa TZ arriba)
- --schedule=0 30 3 * * *
# (Opcional) tiempo de gracia para que el servicio arranque tras actualizar
- --stop-timeout=30s
Forzar actualización
1. Contenedor temporal (one-shot)
Lanzar un contenedor Watchtower independiente, con los mismos parámetros, pero añadiendo --run-once:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once --label-enable --cleanup
2. Lanzar un escaneo manual en el contenedor existente
docker exec -it watchtower /watchtower --run-once --cleanup
Así usas el mismo contenedor que ya tienes corriendo.