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 dfpara 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:
- Verifique qual particao esta cheia com
df -h - Verifique o uso total do Docker com
docker system df - Obtenha detalhamento com
docker system df -v - 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
dockerousudo
1. Primeiro: Verifique se o disco esta realmente cheio (df)
Conclusao: Execute
df -hprimeiro -- 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)/vare uma particao separada que esta cheia (efeito de/var/lib/docker)
2. Verifique quanto o Docker esta usando
Conclusao: Execute
docker system dfpara 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.loggrandes 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 -aoudocker inspectpara 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 lspara 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 prunesem verificar -- volumes contem dados reais.
Nao execute docker system prune imediatamente
Pode excluir mais do que voce espera.
Cuidado com volumes
Volumes frequentemente contem dados reais (banco de dados/WordPress etc.). A recuperacao e dificil se excluidos.
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 -hedocker system dfpara confirmar que o uso diminuiu.
Apos investigacao ou mitigacao, verifique a melhoria:
$ df -h $ docker system df