Renovate automated Docker image version pinning

Imagine a cena. Uma stack compose homelab tem funcionado perfeitamente há seis meses. Jellyfin, Paperless, Immich, Postgres, o usual. Num sábado de manhã executamos docker compose pull && docker compose up -d, esperando a mesma operação sem mudanças de cinco segundos que sempre conseguimos. Postgres recusa iniciar. Os logs dizem que o diretório de dados em disco foi inicializado por uma versão principal mais antiga e não pode ser lido pela nova. Isso é o que conseguimos ao fixar em :latest. A tag :latest não é uma versão, é um marcador que o mantenedor move quando bem entende, e o dia em que aponta para Postgres 17 em vez de Postgres 16 é o dia em que seu fim de semana desaparece. Abaixo estão os melhores aplicativos para fixar versões de imagens Docker em que ainda confiamos em 2026, desde automação total até simples notificações.

Por que :latest é uma armadilha, em um parágrafo

Dois hosts puxam o mesmo :latest com uma semana de diferença e acabam executando compilações diferentes. Um job CI feito seis meses atrás reconstrói hoje e puxa mudanças upstream que quebram as coisas que ninguém leu o changelog. Reverter é uma caça ao tesouro porque históricos de tags no Docker Hub desaparecem. A solução é chata e funciona: fixar uma tag semver que você escolheu propositalmente (postgres:16.4), ou melhor, fixar um digest de imagem (postgres@sha256:...) para obter exatamente os mesmos bytes toda vez. As ferramentas abaixo fazem essa fixação automaticamente para nós, ou monitoram nossas fixações atuais e nos dizem quando é seguro atualizar.

O que procurar em uma ferramenta de fixação de versão Docker

Cinco coisas importam quando escolhemos uma:

Tabela de comparação

Ferramenta Melhor para Atualizações automáticas Apenas notificações Configuração
Renovate Repositórios compose ou K8s respaldados por git Sim (via PR) Sim Moderada
Watchtower Contêineres homelab sem estado Sim (pull ao vivo) Sim Muito fácil
Diun Apenas alertas para qualquer registro Não Sim Fácil
What’s up Docker UI web + notificações para homelabs Opcional Sim Fácil
Portainer Equipes que preferem GUI Manual por stack Sim Fácil
Dependabot Repos GitHub públicos com arquivos compose Sim (via PR) Não Zero
Trivy Auditorias de versão com prioridade de segurança Não Sim (relatório) Fácil
Podman Desktop Fluxos de trabalho Podman e K8s-adjacentes Manual Sim Fácil

As ferramentas

1. Renovate

Renovate é a resposta mais próxima aqui. Aponte para um repositório contendo docker-compose.yaml, Dockerfile, overlays Kustomize, ou gráficos Helm, e abrirá um pull request cada vez que uma imagem ganhar uma nova tag. Compreende fixação de digest, portanto podemos fixar postgres:16.4@sha256:... e Renovate manterá as duas partes sincronizadas. Regras de agrupamento nos permitem agrupar versões de patch em um PR enquanto mantemos bumps maiores separados, o que corresponde a como a maioria de nós realmente quer revisar mudanças. Auto-hospedado ou no app hosted gratuito da Mend, é o mesmo motor. A curva de aprendizado é real (o arquivo de config é JSON5 com muitos botões), mas uma vez em execução, é a ferramenta que mais confiável mantém um homelab honesto.

Baixar: Website

2. Watchtower

Watchtower é o clássico. Coloque em um arquivo compose, diga quais contêineres observar, e puxará novas imagens e recriará o contêiner no local. Isso é uma superpower para serviços sem estado (um proxy reverso, uma ferramenta efêmera) e uma armadilha para os com estado (um banco de dados, qualquer coisa com esquema). A forma correta de executar Watchtower em 2026 é com uma whitelist de labels, notificações ativadas, e uma regra rígida de que nada com dados persistentes está em sua lista. Usado dessa forma, ainda é a maneira mais rápida de manter o chato 80 por cento de um homelab fresco sem supervisão.

Baixar: Website

3. Diun (Docker Image Update Notifier)

Diun faz uma coisa. Observa imagens (de labels Docker, arquivo compose, serviço Swarm, cluster Kubernetes, lista YAML estática) e envia uma notificação quando uma nova tag ou digest aparece. Sem pulls, sem restarts, apenas uma mensagem no Discord, Slack, Gotify, Ntfy, Matrix, email, ou webhook. Para homelabbers que querem estar no loop mas sempre decidir por si mesmos quando atualizar, Diun é a escolha padrão. É um único binário Go, a config é um arquivo YAML curto, e nunca esquece nada.

Baixar: Website

4. What’s up Docker (WUD)

WUD é o sucessor moderno do nicho “watch and notify”. Tem uma UI web que mostra cada contêiner que rastreia, a tag atual, a tag mais recente disponível, e um link de diff quando possível. Suporta os backends de notificação usuais mais Home Assistant, Apprise e MQTT, o que significa que se encaixa bem em um dashboard de casa inteligente. Pode acionar atualizações via Docker, Kubernetes, ou webhook HTTP, então podemos conectá-lo a qualquer pipeline de lançamento que já usamos. Para quem gostava de Diun mas quer uma tela para olhar, WUD é a atualização.

Baixar: Website

5. Portainer

Portainer é uma GUI para Docker e Kubernetes, e sua visualização de stack mostra a tag de imagem que estamos executando lado a lado com o que está disponível. Não abrirá pull requests ou escreverá fixações de digest para nós, mas torna a fixação visível e o botão de atualização explícito, o que importa quando a pessoa mantendo o homelab não é a que o configurou. Community Edition é grátis e cobre tudo que a maioria dos self-hosters precisa. Business Edition adiciona RBAC e gerenciamento multi-cluster para equipes.

Baixar: Website

6. Dependabot

Se nossos arquivos compose vivem em um repositório público ou hospedado no GitHub, Dependabot é gratuito e requer quase nenhuma configuração. Ative-o, adicione um dependabot.yml de duas linhas com package-ecosystem: docker, e abrirá um pull request cada vez que qualquer FROM image:tag na árvore ganhar uma nova tag. É mais estreito que Renovate (sem agrupamento, sem sincronização de digest, menos ecossistemas), mas para uma equipe já vivendo em PRs do GitHub, é o caminho de menor resistência. Renovate vence em recursos, Dependabot vence em atrito.

Baixar: Website

7. Trivy

Trivy é um scanner de vulnerabilidades, não um atualizador, mas pertence a esta lista porque metade da razão pela qual fixamos versões é saber a quais CVE realmente estamos expostos. Aponte Trivy para um contêiner em execução, arquivo compose, ou namespace Kubernetes, e imprimirá cada CVE conhecido contra a tag de imagem exata. A saída deixa claro quando uma fixação envelheceu mal, e se emparelha perfeitamente com Renovate: Trivy nos diz qual imagem precisa de atualização e por quê, Renovate abre o PR que faz isso. Funciona como CLI, um passo de CI, ou operador Kubernetes, tudo do mesmo binário.

Baixar: Website

8. Podman Desktop

Para quem mudou para Podman (ou está executando Docker no macOS através de um runtime mais leve), Podman Desktop cobre o mesmo terreno que Portainer faz para Docker. Lista contêineres locais com suas tags de imagem atuais, mostra atualizações, e fala manifestos Kubernetes nativamente, o que é útil quando um homelab está na metade do caminho para k3s. Não é um scheduler e não tem opinião sobre fixação, mas torna a fixação atual óbvia e a diferença entre local e registry um clique. Grátis, open-source, e multiplataforma.

Baixar: Website

Como escolher o correto

A resposta é quase sempre dois desses, não um.

Combine um notificador ou bot de PR com um auditor e o problema da “stack compose que rodou limpa por seis meses e depois explodiu” para de acontecer.

FAQ

Por que fixar em :latest é ruim?

Porque :latest não é uma versão. É um ponteiro móvel que o mantenedor da imagem muda cada vez que publica uma nova compilação. Dois servidores que puxaram image:latest com uma semana de diferença estão executando binários diferentes, e uma recompilação meses depois pode puxar silenciosamente uma mudança breaking upstream. Fixar uma tag específica como :1.24.2, ou melhor um digest como @sha256:..., significa que a mesma entrada sempre produz o mesmo contêiner em execução.

Devo fixar imagens Docker em um digest?

Para qualquer coisa que toque produção ou dados com estado, sim. Um digest é o hash de conteúdo imutável de uma imagem específica, então postgres:16.4@sha256:abc... sempre puxará exatamente os mesmos bytes mesmo que o mantenedor depois republique a tag 16.4 com uma compilação diferente. Renovate e What’s up Docker entendem fixações de digest e as manterão atualizadas para nós, o que elimina a objeção comum “digests são incômodos de manter manualmente”.

Qual é a diferença entre Renovate e Dependabot para Docker?

Ambos abrem pull requests quando uma imagem ganha uma nova tag. Renovate lida com mais formatos (Compose, Helm, Kustomize, manifestos Kubernetes, GitHub Actions, Dockerfile), suporta fixação de digest, e nos permite agrupar atualizações para que bumps de patch aterrem juntos enquanto majors permanecem separados. Dependabot é mais simples de ativar no GitHub, se integra nativamente com a aba de segurança, e cobre os casos comuns de Dockerfile e compose. Em um repositório ocupado, Renovate vale a configuração extra; em um repositório pessoal, Dependabot é a vitória de dois minutos.

Watchtower pode quebrar meus contêineres?

Sim, e faz, cada vez que o apontamos para um serviço com estado. Se a imagem pula uma versão principal e a migração de esquema é unidirecional, Watchtower alegremente a puxará, reiniciará o contêiner, e nos deixará com um banco de dados que não inicializará. A solução é usar seu filtro de labels para que apenas toque contêineres que carreguem um label com.centurylinklabs.watchtower.enable=true explícito, e nunca coloque esse label em qualquer coisa que possua dados.

Renovate é grátis para homelabs auto-hospedados?

Sim. Renovate CLI e imagem Docker são open-source e gratuitos para executar contra qualquer repositório, incluindo instâncias Gitea ou GitLab auto-hospedadas. Mend também oferece um app hosted gratuito para repositórios GitHub públicos para que não precisemos executar o scheduler por conta própria. Tiers pagos existem para organizações que querem hospedagem com SLA, mas um homelab nunca precisa deles.

Preciso de um notificador e um scanner?

Eles respondem perguntas diferentes. Um notificador ou bot de PR (Renovate, Diun, WUD, Dependabot) nos diz “existe uma versão mais recente”. Um scanner (Trivy) nos diz “a versão que estamos executando tem CVEs conhecidas”. Uma fixação pode ser atual e ainda vulnerável, ou antiga e ainda segura. Executar um de cada cobre ambos os ângulos sem muito sobreposição.