Container Docker reiniciando em loop: como diagnosticar e corrigir
Container em loop de reinicialização (restart loop) significa que ele inicia, falha e é reiniciado repetidamente pelo Docker. O diagnóstico começa com `docker logs <container>` — 90% das vezes a causa está ali. As causas mais comuns são: a aplicação crasha imediatamente (erro de código ou config), OOM (sem memória), variável de ambiente obrigatória ausente ou conflito de porta.
Passo 1: ler os logs do container
O primeiro passo é sempre ver o que o container está reportando antes de morrer:
# Ver os últimos 50 logs (mesmo que o container esteja parado)
docker logs --tail 50 nome_do_container
# Seguir os logs em tempo real (Ctrl+C para parar)
docker logs -f nome_do_container
# Com docker-compose
docker compose logs --tail 50 nome_do_servicoPasso 2: inspecionar o estado do container
docker inspect mostra o estado detalhado, incluindo o código de saída (ExitCode) e se foi morto por OOM:
# Ver estado completo do container
docker inspect nome_do_container | grep -A 10 '"State"'
# Procurar especificamente por OOM kill e código de saída
docker inspect nome_do_container | grep -E '"OOMKilled"|"ExitCode"'Causas comuns e como corrigir
Os motivos mais frequentes de restart loop, em ordem de ocorrência:
Diagnóstico de OOM (falta de memória)
Para containers matados por falta de memória, verifique o uso atual antes de ajustar limites:
# Ver uso de memória de todos os containers em tempo real
docker stats --no-stream
# Ou só de um container específico
docker stats --no-stream nome_do_container
# Configurar limite de memória no docker-compose.yml
services:
minha-app:
image: minha-imagem:latest
deploy:
resources:
limits:
memory: 512M # mínimo recomendado
cpus: '0.5'Rodar o container em modo interativo para debug
Quando os logs não são suficientes, substitua o comando de entrada para abrir um shell dentro do container:
# Substituir o entrypoint por bash para inspecionar o ambiente
docker run --rm -it --entrypoint /bin/bash nome_da_imagem
# Ou, se o container usa sh (imagens Alpine)
docker run --rm -it --entrypoint /bin/sh nome_da_imagem
# Verificar se as variáveis de ambiente estão chegando
docker run --rm -it --env-file .env --entrypoint /bin/sh nome_da_imagem
env | grep NOME_DA_VAR$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o Docker em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.