Guia de armazenamento para desenvolvedores

O Docker está ocupando espaço no meu Mac

O Docker Desktop guarda tudo em um arquivo. Ele cresce a cada compilação, e apagar imagens não o deixa menor. Aqui está o porquê, e o que de fato recupera o espaço.

Teste grátis de 14 dias, sem cartão. Depois US$ 15 uma vez para 3 computadores, macOS e Linux.

Treemap do Bytesweep em que a imagem de disco do Docker domina uma pasta pessoal do Mac

Onde está o espaço

No macOS o Docker Desktop roda uma máquina virtual Linux, e todo o sistema de arquivos dessa máquina é um único arquivo esparso no seu Mac:

~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

Confira o tamanho real em disco — não o lógico, que é sempre o máximo que você permitiu ao Docker:

du -h -d0 ~/Library/Containers/com.docker.docker/Data/vms/0/data/

Por que apagar imagens não reduz o arquivo

Remover uma imagem libera blocos dentro do sistema de arquivos da máquina virtual, mas o arquivo no seu Mac mantém o tamanho: ele já tomou aquilo do macOS. Versões recentes do Docker Desktop emitem TRIM de dentro da máquina, o que deixa o macOS reaver os blocos liberados, mas isso acontece no ritmo do Docker e não no instante do prune. Até lá, docker system df informa gigabytes liberados enquanto o Finder não mostra mudança nenhuma.

Reaver o espaço

Em ordem: do menos destrutivo ao mais.

1. Ver o que o Docker acha que está usando

Comece sempre por aqui. Ele separa imagens, contêineres, volumes e cache de compilação, e diz quanto de cada um dá para recuperar.

docker system df -v

2. Limpar o cache de compilação

Numa máquina que compila imagens com frequência, esse costuma ser o maior item e o mais seguro de remover: só deixa a próxima compilação mais lenta.

docker builder prune -a

3. Limpar o que de fato não é usado

Contêineres parados, imagens órfãs e redes sem uso:

docker system prune

Acrescente -a para remover também toda imagem que nenhum contêiner em execução use — o que significa baixá-las de novo depois. Só acrescente o próximo --volumes se tiver certeza: nos volumes é onde os bancos de dados guardam seus dados, e esse é o único comando desta página que destrói algo que você não consegue baixar de novo.

4. Liste os volumes antes de mexer neles

Veja o que sumiria de verdade:

docker volume ls
docker volume ls -f dangling=true

O Docker raramente é a única coisa

Você pode rodar todos os comandos desta página, e no mesmo Mac o DerivedData do Xcode e alguns pesos de modelos esquecidos costumam ser igualmente grandes. O Bytesweep mede o tamanho real do Docker em disco ao lado de todos eles numa passada de dez segundos, para você resolver o disco de uma vez em vez de caçar ferramenta por ferramenta.

5. Fazer o macOS reaver o arquivo

Depois do prune, o Docker Desktop tem um jeito previsto de devolver os blocos liberados: Ajustes → Recursos → Avançado → Uso de disco, ou sair e reabrir o Docker Desktop, o que dispara o TRIM na inicialização. Dê um minuto e confira o tamanho do arquivo de novo antes de decidir que não funcionou.

6. Baixar o limite de disco

Em Ajustes → Recursos, o limite de disco virtual é o quanto o Docker.raw pode crescer. Baixá-lo não libera nada sozinho, mas põe um teto no problema. Tê-lo aumentado «por via das dúvidas» é o motivo de o arquivo ter chegado a 64 GB.

7. O último recurso

Ajustes → Solução de problemas → Clean / Purge data reinicia por completo o disco da máquina virtual e devolve o arquivo a quase zero. Apaga toda imagem, contêiner e volume que você tem. Use quando nada mais funcionou e você sabe o que há nos seus volumes.

Não apague o Docker.raw pelo Finder. Não é um arquivo de cache: são os dados de toda a instalação do Docker, e removê-lo com o Docker em execução pode deixar a máquina virtual num estado que vai exigir um reset de qualquer jeito.

Também vale conferir

O Docker raramente está sozinho

No Mac em que o Docker chegou a 50 GB, o DerivedData do Xcode e os modelos de IA locais costumam vir logo atrás. Se você vai recuperar espaço, vale medir o disco inteiro uma vez em vez de consertar uma coisa de cada vez. A lista completa →

No Linux não existe arquivo de imagem

No Linux o Docker grava direto em /var/lib/docker, então um prune libera o espaço na hora e nada do problema de TRIM acima se aplica. Limpeza de disco no Linux →

Ver o Docker ao lado de todo o resto

O Bytesweep mede o tamanho real do Docker em disco, mostra ao lado de Xcode, simuladores, node_modules e pesos de modelos, e marca o que dá para limpar com segurança — sem encostar nos seus volumes.

Perguntas

É seguro apagar o Docker.raw?

Não pelo Finder, e não com o Docker em execução. Esse único arquivo é toda imagem, contêiner e volume que você tem. Se quiser mesmo começar do zero, use Solução de problemas → Clean / Purge data no Docker Desktop, que faz o mesmo de um jeito que o Docker conhece.

Por que o docker system prune diz que liberou 20 GB se nada mudou?

Porque liberou 20 GB dentro do sistema de arquivos da máquina virtual, não no seu Mac. O arquivo mantém o tamanho até o TRIM rodar e o macOS reaver os blocos. Sair e reabrir o Docker Desktop costuma disparar isso.

O docker system prune apaga meus bancos de dados?

Só se você acrescentar --volumes. Sem essa opção ele deixa os volumes em paz. Com ela, todo volume não ligado a um contêiner some, e o volume de um banco parado conta como não ligado.

Qual deveria ser o tamanho do Docker.raw?

Não há resposta certa, mas numa máquina com alguns projetos ativos, de 15 a 25 GB é normal, e 60 GB quer dizer que o cache de compilação nunca foi limpo. Confira com docker system df -v antes de supor que são as imagens.