Docker/Artigo

    Como debugar logs de containers Docker

    Para acessar logs de um container Docker, use docker logs <container> — funciona mesmo se o container estiver parado. Para filtrar por tempo: --since 30m ou --until 2026-06-07T10:00:00. Para seguir em tempo real: --follow (-f). Em Docker Compose, docker compose logs -f <serviço> é o equivalente. O log driver padrão json-file armazena em /var/lib/docker/containers/ no host.

    Comandos essenciais de log

    Os comandos mais úteis para acessar e filtrar logs de containers:

    bash
    # Todos os logs de um container
    docker logs nome_container
    
    # Últimas N linhas
    docker logs --tail 100 nome_container
    
    # Seguir em tempo real
    docker logs -f nome_container
    
    # Seguir com timestamp
    docker logs -f -t nome_container
    
    # Filtrar por janela de tempo
    docker logs --since 1h nome_container        # última 1 hora
    docker logs --since 30m nome_container       # últimos 30 minutos
    docker logs --since 2026-06-07T09:00:00Z nome_container
    
    # Docker Compose
    docker compose logs -f --tail 50 nome_servico
    docker compose logs -f   # todos os serviços

    Logs de containers que crasharam

    O Docker preserva os logs mesmo após o container parar ou crashar — você pode sempre recuperá-los:

    bash
    # Listar containers parados (incluindo crashados)
    docker ps -a
    
    # Ver logs do container crashado pelo ID ou nome
    docker logs abc123def456
    
    # Ver os últimos logs antes do crash
    docker logs --tail 200 abc123def456
    
    # Para encontrar o container mais recente de um serviço:
    docker ps -a --filter "name=nome_do_servico" --format "table {{.ID}}	{{.Status}}	{{.Names}}"
    Dica
    Os logs são preservados até que o container seja removido (docker rm) ou o volume de logs seja apagado. docker stop não apaga logs — docker rm sim.

    Configurar rotação de logs (evitar disco cheio)

    O driver padrão json-file não tem limite por padrão — logs crescem indefinidamente. Configure rotação globalmente ou por serviço:

    bash
    # Configuração global no daemon (afeta novos containers)
    # /etc/docker/daemon.json
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    # sudo systemctl reload docker
    
    # Por serviço no docker-compose.yml (substitui config global)
    services:
      app:
        image: minha-app:latest
        logging:
          driver: json-file
          options:
            max-size: "10m"
            max-file: "5"    # mantém 5 arquivos de 10MB = 50MB máximo
    Dica
    max-file: "3" significa que o Docker mantém 3 arquivos de rotação. Com max-size: "10m", o total máximo é 30MB por container. Ajuste conforme o volume de logs da sua aplicação.

    Localizar os logs no disco do host

    Se você precisa de acesso direto aos arquivos de log (para grep, tail ou envio para um coletor externo):

    bash
    # Encontrar o path do arquivo de log de um container
    docker inspect nome_container | grep '"LogPath"'
    
    # Os arquivos ficam em:
    # /var/lib/docker/containers/<container-id>/<container-id>-json.log
    
    # Ler diretamente (requer sudo)
    sudo tail -f $(docker inspect --format='{{.LogPath}}' nome_container)
    
    # Grep no arquivo de log (formato JSON)
    sudo grep '"error"' $(docker inspect --format='{{.LogPath}}' nome_container)
    Dica
    Cada linha do arquivo é um JSON: {"log": "mensagem ", "stream": "stdout", "time": "..."}. Para extrair só o texto: sudo cat arquivo.log | jq -r .log

    Logs de múltiplos containers com prefixo

    Para monitorar vários serviços ao mesmo tempo, docker compose logs agrega e prefixa cada linha com o nome do serviço:

    bash
    # Todos os serviços do stack
    docker compose logs -f --tail 50
    
    # Múltiplos serviços específicos
    docker compose logs -f app db redis
    
    # Apenas erros (grep no output agregado)
    docker compose logs --tail 200 2>&1 | grep -i "error|fatal|exception"
    
    # Salvar logs em arquivo para análise posterior
    docker compose logs --tail 1000 > logs-$(date +%Y%m%d-%H%M%S).txt

    $ 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.

    Perguntas frequentes