Logs de container e como não perdê-los
Onde os logs do Docker são armazenados, como limitar seu tamanho para que não encham o disco e o que fazer para que os registros sobrevivam à recriação do container.
Atualizado em 23 de agosto de 2026
Quando um serviço cai, o log é a única fonte da verdade. Por padrão, o Docker o grava em um arquivo ao lado do contêiner e não impõe limite de tamanho: uma aplicação tagarela pode encher o disco inteiro em uma semana.
Como ler
docker logs -f --tail 100 <container>
docker compose logs -f app
docker compose logs --since 30m --timestamps app
docker logs <container> 2>&1 | grep -i error | tail -50
Vale lembrar: o Docker mostra o que a aplicação escreve na saída padrão e na saída de erro. Se ela gravar em um arquivo próprio dentro do contêiner, docker logs não mostrará nada — é preciso procurar o log lá dentro ou redirecionar a saída.
docker compose exec app ls -la /var/log
Limite o tamanho agora mesmo
A configuração global para todos os contêineres fica em /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker
A configuração vale para os contêineres criados após a reinicialização. Os que estão em execução precisam ser recriados. Para um único serviço, o mesmo vale no Compose:
services:
app:
logging:
driver: json-file
options:
max-size: "20m"
max-file: "3"
O resultado: no máximo 60 MB por serviço em vez de crescimento ilimitado.
Confira o tamanho atual antes que ele te surpreenda:
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail. Não dá para reduzir um arquivo em uso comrm— o espaço não é liberado enquanto o Docker mantém o descritor. O jeito certo: recriar o contêiner ousudo truncate -s 0 <file>.
Faça os logs sobreviverem ao contêiner
O arquivo de log é apagado junto com o contêiner. Se o histórico importa, entregue-o ao journal do sistema:
logging:
driver: journald
options:
tag: "myapp"
journalctl -t myapp -n 200 --since today
journalctl -t myapp -p err --since "2 days ago"
O journald rotaciona os registros por conta própria e é limitado pela configuração SystemMaxUse em /etc/systemd/journald.conf. Para ver quanto espaço ele ocupa: journalctl --disk-usage.
Para vários serviços ao mesmo tempo, é mais prático coletar tudo em um só lugar — por exemplo, com um contêiner coletor dedicado que armazena os registros em arquivos por dia. Mas comece pelo journald: ele já está lá e não custa nada.
O que procurar ao depurar uma queda
- As últimas 200 linhas antes da queda:
docker logs --tail 200 <container>. - Código de saída:
docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>. Código 137 etrueemOOMKilledsignificam que o kernel matou o processo por falta de memória — veja limites de recursos. - O log do sistema da máquina:
sudo dmesg -T | tail -50mostrará mortes por falta de memória e erros de disco.
Erros comuns
- O disco encheu de logs e todos os serviços caíram. Limitar o tamanho é obrigatório logo após instalar o Docker.
- Procurar o log de um contêiner já excluído. Depois de
docker compose downele se foi. Colete os registros nojournaldcom antecedência. - Segredos no log. As aplicações adoram imprimir strings de conexão com senhas. Qualquer pessoa com acesso à máquina pode ler o log.
- Procurar o erro no console de texto. Ele é sempre 80×24 e linhas longas são cortadas. Para ler logs, o SSH ou o console “Screen” é mais prático.