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 paradosAs variáveis REPO_USER e REPO_PASS autenticam no registry privado (Docker Hub, GHCR, etc.).
Comportamento
- Watchtower faz pull da imagem no registry
- Compara o digest com a imagem em uso
- Se diferente: para o container → pull da nova imagem → recria com as mesmas flags/volumes/env
- Remove a imagem antiga (se
WATCHTOWER_CLEANUP=true)
Modos de operação
| Modo | Configuração | Uso |
|---|---|---|
| Poll (padrão) | WATCHTOWER_POLL_INTERVAL=300 | verifica periodicamente |
| HTTP API | WATCHTOWER_HTTP_API_UPDATE=true | disparo manual via webhook |
| One-shot | --run-once | executa 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