Watchtower Docker auto-update

O artigo XDA sobre fixar imagens do Docker em latest é uma lição que todo operador de homelab aprende da maneira difícil: latest se move sem avisar, e um pull ruim pode quebrar uma pilha que você não pode reverter. As ferramentas abaixo lhe dão o caminho do meio: notificação sobre novas imagens, fixar em tags reais e atualizar em um cronograma que você controla. Sete escolhas em Docker, Podman, Compose, Swarm e Kubernetes.

O que procurar em uma atualização automática de contêiner

A escolha correta depende da escala, não da preferência. Considere:

Comparação rápida

App Melhor para Runtime Grátis Notificações Auto-aplicar
Watchtower Hosts homelab solo Docker Sim Sim Sim
Diun Apenas notificação, sem auto-aplicar Docker, Podman, Kubernetes Sim Sim Não
Ouroboros Alternativa antiga de Watchtower Docker Sim Sim Sim
Podman auto-update Systemd Podman nativo Podman Sim Não Sim
Shepherd Serviços Docker Swarm Docker Swarm Sim Não Sim
Renovate Compose ou Kubernetes gerenciados por GitOps Qualquer (via git) Sim (código aberto) Sim Via PRs
Portainer Atualizações manuais com GUI Docker, Swarm, Kubernetes Free CE Sim Sim

1. Watchtower, melhor padrão para um único host Docker

Watchtower é um contêiner Docker que observa seus outros contêineres Docker. Quando uma nova tag de imagem é enviada para o registro, Watchtower a extrai, recria o contêiner com a mesma configuração e limpa a imagem antiga. Adicione um rótulo a um contêiner para ativar ou desativar.

É o iniciador padrão para um host Docker doméstico porque requer um bloco Docker Compose de duas linhas para configurar e faz exatamente uma coisa bem.

Onde fica aquém: Watchtower assume latest ou uma tag mutável. Se você fixar em 1.2.3, ele não mudará para 1.2.4 por conta própria. Sem rollback. O projeto upstream desacelerou; forks (baseados em WOL, com patches de segurança) são comuns.

Preço: Grátis e código aberto (Apache 2.0).

Plataformas: Qualquer host que execute Docker (Windows, macOS, Linux, ARM).

Download: containrrr.dev/watchtower · GitHub

Conclusão: A escolha correta para um host Docker pessoal, com a ressalva de que você não deve apontá-lo para serviços de produção que você não pode se permitir quebrar.

2. Diun, melhor escolha apenas de notificação

Diun observa tags de imagem em seu registro e envia uma notificação quando um novo digest está disponível. Nunca extrai, nunca recria, nunca toca seus contêineres. Você recebe um ping do Discord ou uma notificação do Gotify, e atualiza em seus termos.

A razão de escolhê-lo é o controle. O auto-aplicar do Watchtower se move mais rápido do que a maioria das pessoas quer; Diun mantém os humanos no loop.

Onde fica aquém: Você ainda precisa executar docker compose pull && docker compose up -d manualmente.

Preço: Grátis e código aberto (MIT).

Plataformas: Qualquer host com Docker, Podman ou um cluster Kubernetes.

Download: crazymax.dev/diun · GitHub

Conclusão: A escolha correta quando você quer saber sobre atualizações mas não aplicá-las automaticamente.

3. Ouroboros, melhor alternativa antiga de Watchtower

Ouroboros é uma alternativa baseada em Python para Watchtower que precede Watchtower e faz o mesmo trabalho básico: extrair, recriar, podar. Alguns operadores de homelab permanecem no Ouroboros porque sua configuração é mais próxima do que escreveram anos atrás.

O desenvolvimento é lento mas estável. Novos usuários devem começar com Watchtower ou Diun.

Onde fica aquém: Cadência de lançamento mais lenta que as alternativas. O conjunto de recursos é essencialmente congelado.

Preço: Grátis e código aberto (MIT).

Plataformas: Qualquer host que execute Docker.

Download: GitHub

Conclusão: Tudo bem se você já o executa. Caso contrário, Watchtower ou Diun.

4. Podman auto-update, melhor opção nativa de Podman

Podman vem com podman auto-update, um subcomando que lê um rótulo em cada contêiner e extrai imagens frescas em um timer do systemd. Nenhum contêiner sidecar, nenhuma ferramenta de terceiros. Ele se integra com Quadlet (gerador Podman para systemd) para definições de serviço declarativas.

A razão de escolhê-lo é que se você executar Podman sem raiz no RHEL, Fedora ou um Debian moderno, o caminho de atualização automática já existe no SO.

Onde fica aquém: Apenas Podman. Nenhuma notificação integrada.

Preço: Grátis e código aberto (Apache 2.0).

Plataformas: Linux (Podman).

Download: Documentação em docs.podman.io

Conclusão: A escolha nativa em hosts Podman. Nenhuma ferramenta nova necessária.

5. Shepherd, melhor para Docker Swarm

Shepherd observa serviços Docker Swarm (não contêineres autônomos) e lamina serviços quando sua tag de imagem tem um novo digest. Ele respeita a estratégia de atualização contínua do Swarm, o que significa que funciona bem com verificações de saúde e paralelismo de atualização.

Muito poucas pessoas ainda executam Swarm em escala, mas para aqueles que executam, Shepherd é o atualizador automático construído para o modelo de Swarm.

Onde fica aquém: Apenas Swarm. Sem uso fora de um cluster Swarm.

Preço: Grátis e código aberto (MIT).

Plataformas: Docker Swarm (hosts Linux).

Download: GitHub

Conclusão: A escolha correta dentro de um Docker Swarm.

6. Renovate, melhor abordagem GitOps

Renovate é um bot que abre pull requests em seu repo git quando uma tag de imagem tem uma atualização. Funciona em arquivos Compose, manifestos Kubernetes, charts Helm, Dockerfiles, GitHub Actions e dezenas de outros destinos. O PR inclui notas de versão, links do changelog e uma verificação de que a nova tag realmente existe.

A razão de escolhê-lo é que as atualizações se tornam mudanças de código. Você as revisa, as mescla e CI aplica a atualização. Rollback é um git revert. Este é o padrão com o qual a maioria das equipes de produção acaba.

Onde fica aquém: Requer um pipeline de implantação baseado em git. Não é adequado para um homelab que não usa CI.

Preço: Grátis auto-hospedado (Apache 2.0). Serviço gerenciado (Mend) também é grátis para código aberto e equipes pequenas.

Plataformas: GitHub, GitLab, Bitbucket, git auto-hospedado.

Download: renovatebot.com · GitHub

Conclusão: A escolha correta quando sua infraestrutura está definida em git.

7. Portainer, melhor atualização manual baseada em GUI

Portainer é um painel de controle de gerenciamento Docker/Swarm/Kubernetes. Mostra cada contêiner e cada imagem, marca quando uma nova imagem está disponível e permite recriar o contêiner com o pull fresco com dois cliques. Community Edition é gratuita; Business Edition adiciona RBAC, varredura de imagem e muito mais.

A razão de escolhê-lo é que algumas atualizações são decisões únicas que você quer tomar a partir de uma UI em vez de um arquivo de configuração.

Onde fica aquém: Não totalmente automatizado. Você é o atualizador automático; Portainer apenas lhe dá o botão.

Preço: Community Edition gratuita. Business Edition paga.

Plataformas: Docker, Swarm, Kubernetes (auto-hospedado).

Download: portainer.io · GitHub

Conclusão: A escolha para fluxos de trabalho de clique para atualizar e frotas mistas.

Como escolher

FAQ

É seguro executar Watchtower contra produção?
Não sem uma política de tag cuidadosa. Aponte-o em :latest e pode quebrar sua pilha em qualquer erro upstream. Aponte-o em tags fixadas por semver e adicione rollback baseado em verificação de saúde. Melhor: use Renovate para qualquer coisa que você não possa se permitir quebrar.

Como faço para fixar em uma versão real em vez de latest?
Substitua image: nginx por image: nginx:1.27.2 em seu arquivo Compose. Renovate abre um PR quando 1.27.3 é lançado. Watchtower e Diun ambos notam novos digests mesmo para tags fixadas se a tag em si for atualizada upstream.

Essas ferramentas funcionam com registros privados?
Sim. Watchtower, Diun e Renovate todos suportam credenciais docker para registros privados (ECR, GCR, Harbor, auto-hospedado).

Posso reverter uma atualização ruim?
Watchtower e Ouroboros não mantêm a imagem anterior marcada; você precisa do ID de imagem anterior ou seu próprio esquema de marcação. A UI do Portainer torna o rollback mais fácil. Rollback de Renovate é git revert.

Com que frequência os contêineres devem auto-atualizar?
Para um homelab, uma vez por dia em uma hora tranquila está bem. Para produção, prefira apenas notificação ou baseado em PR (Renovate) para que as atualizações sejam entregues através de revisão e CI, não um daemon de fundo.