Skip to main content

Watchtower

image.png

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

Imagen

Repositorio de Docker Hub: containrrr/watchtower - Docker Image | Docker Hub

Fichero de variables

environment:
  - TZ=Europe/Madrid

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.