Watchtower é um container que fica rodando em background e monitora os demais containers em execução. Quando detecta que uma nova versão da imagem foi publicada no registry, ele para o container, faz pull da nova imagem e sobe novamente, com as mesmas configurações originais.

Deploy

# docker-compose.yml
services:
  watchtower:
    image: containrrr/watchtower:latest
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      REPO_USER: ${REPO_USER}
      REPO_PASS: ${REPO_PASS}
      WATCHTOWER_POLL_INTERVAL: 300        # verifica a cada 5 minutos
      WATCHTOWER_CLEANUP: "true"           # remove imagens antigas após update
      WATCHTOWER_INCLUDE_STOPPED: "false"  # ignora containers parados

As variáveis REPO_USER e REPO_PASS autenticam no registry privado (Docker Hub, GHCR, etc.).

Comportamento

  1. Watchtower faz pull da imagem no registry
  2. Compara o digest com a imagem em uso
  3. Se diferente: para o container → pull da nova imagem → recria com as mesmas flags/volumes/env
  4. Remove a imagem antiga (se WATCHTOWER_CLEANUP=true)

Modos de operação

ModoConfiguraçãoUso
Poll (padrão)WATCHTOWER_POLL_INTERVAL=300verifica periodicamente
HTTP APIWATCHTOWER_HTTP_API_UPDATE=truedisparo manual via webhook
One-shot--run-onceexecuta uma vez e encerra

Monitorar containers específicos

Por padrão, monitora todos os containers. Para monitorar apenas selecionados:

# No container que deve ser monitorado:
labels:
  - "com.centurylinklabs.watchtower.enable=true"
 
# No Watchtower, ativar label filter:
environment:
  WATCHTOWER_LABEL_ENABLE: "true"

Notificações

environment:
  WATCHTOWER_NOTIFICATIONS: slack
  WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL: https://hooks.slack.com/...

Suporta: Slack, Email, Gotify, MSTeams, Shoutrrr.

Ver também: Docker | docker-compose | portainer | Container Registry