Investigando uso de disco do Docker - docker system df / Logs / Volumes

Investigando uso de disco do Docker - docker system df / Logs / Volumes

O que voce vai aprender

  • Como identificar o que esta consumindo espaco em disco em ambientes Docker
  • Usar docker system df para determinar se imagens/containers/volumes sao a causa
  • Passos seguros de verificacao antes de qualquer exclusao

Resumo rapido

Abordagem mais rapida para diagnosticar crescimento de disco do Docker:

  1. Verifique qual particao esta cheia com df -h
  2. Verifique o uso total do Docker com docker system df
  3. Obtenha detalhamento com docker system df -v
  4. Suspeite de inchaço de logs (logs de container) ou crescimento de volumes

Nota: Este artigo foca em "identificacao" - a exclusao requer cautela.

Pre-requisitos

  • SO: Ubuntu
  • Docker instalado
  • Permissoes: Usuario com acesso ao docker ou sudo

1. Primeiro: Verifique se o disco esta realmente cheio (df)

Conclusao: Execute df -h primeiro -- a particao cheia nem sempre e do Docker.

Antes de culpar o Docker, verifique o que esta cheio:

$ df -h

Padroes comuns

  • / esta cheio (dados do Docker geralmente ficam sob root)
  • /var e uma particao separada que esta cheia (efeito de /var/lib/docker)

2. Verifique quanto o Docker esta usando

Conclusao: Execute docker system df para ver qual categoria e a maior antes de investigar.

Obtenha uma visao geral primeiro:

$ docker system df

O que procurar

  • Images: Imagens estao se acumulando?
  • Containers: Containers parados estao se acumulando?
  • Local Volumes: Volumes estao crescendo?
  • Build Cache: Cache de build esta se acumulando?

Apenas saber "o que e grande" torna a proxima investigacao muito mais facil.

3. Localize o que esta crescendo

Conclusao: Execute du -h -d 1 /var/lib/docker -- saida grande confirma que o Docker e a origem.

Os dados do Docker geralmente ficam aqui (pode variar conforme a configuracao):

  • Dados do Docker: /var/lib/docker
  • Logs de container: /var/lib/docker/containers/<container-id>/*.log

Verifique o tamanho de /var/lib/docker:

$ sudo du -h -d 1 /var/lib/docker | sort -h

Se /var/lib/docker e grande, o Docker e provavelmente a causa.

4. Verifique inchaço de logs de container

Conclusao: Arquivos *-json.log grandes no diretorio de containers indicam inchaço de logs.

O Docker armazena stdout/stderr dos containers como logs por padrao. Logging continuo causa crescimento aqui.

4-1. Verifique o tamanho do diretorio de containers

$ sudo du -h -d 2 /var/lib/docker/containers | sort -h | tail -n 20

4-2. Encontre arquivos de log grandes (top 20)

$ sudo find /var/lib/docker/containers -type f -name "*.log" -printf "%s %p\n" | sort -n | tail -n 20

Se voce encontrar arquivos *-json.log enormes, inchaço de logs e o provavel culpado.

5. Identifique qual container e a causa

Conclusao: Use docker ps -a ou docker inspect para mapear um ID de container ao seu nome.

Mapeie o ID do container (string longa no caminho) ao nome do container:

5-1. Listar containers (ID e nome)

$ docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Image}}"

5-2. Obter detalhes de um ID de container especifico

$ docker inspect <container-id> --format '{{.Name}}'

Nota: .Name pode ter um / no inicio.

6. Verifique o crescimento de volumes

Conclusao: Execute docker volume ls para listar volumes, depois verifique qual container usa cada um.

Dados de banco, uploads do WordPress, caches etc. tendem a se acumular em volumes.

6-1. Listar volumes

$ docker volume ls

6-2. Ver qual container usa qual volume

$ docker ps -a --format "table {{.Names}}\t{{.Mounts}}"

Isso mostra quais containers estao usando quais volumes.

7. Precaucoes de seguranca (importante)

Conclusao: Nunca execute docker system prune sem verificar -- volumes contem dados reais.

Inchaço de logs requer analise de causa raiz

Se a causa do logging persistir, o problema vai recorrer.

Abordagens de mitigacao

Se inchaço de logs e a causa, os proximos passos tipicos incluem:

  • Configurar rotacao de logs (Docker logging driver / log-opts com limites)
  • Revisar o volume de logs da aplicacao (tempestades de erro, logs de debug)
  • Encaminhar logs necessarios para um sistema separado

Exclusao e uma correcao temporaria - parar a causa proporciona estabilidade a longo prazo.

Verificacao

Conclusao: Execute novamente df -h e docker system df para confirmar que o uso diminuiu.

Apos investigacao ou mitigacao, verifique a melhoria:

$ df -h
$ docker system df

Proximas leituras