Por que o Docker ocupa tanto espaço no Mac e como resolver
O Docker ocupa tanto espaço no Mac porque tudo o que ele guarda, cada imagem, contêiner, volume e item do cache de build, fica dentro de um único arquivo de disco virtual chamado Docker.raw, e nada ali é removido até você remover. Para recuperar espaço, faça a limpeza de dentro do Docker com docker system prune e os comandos relacionados.
Não apague o Docker.raw no Finder. Isso apaga tudo de uma vez, incluindo os bancos de dados em volumes. Os passos abaixo vão da limpeza mais segura à mais completa.
Onde o espaço do Docker realmente está
O Docker Desktop roda os contêineres dentro de uma pequena máquina virtual Linux. O disco dessa máquina é um único arquivo no seu Mac, em ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw.
O arquivo é esparso. O Finder pode mostrá-lo com o tamanho máximo permitido mesmo quando muito menos está em uso. O comando abaixo mostra os dois números: a primeira coluna é o espaço realmente ocupado no seu disco, e o tamanho que aparece mais adiante na linha é o máximo.
É por isso que não dá para apagar os arquivos de um contêiner de dentro do macOS, e é por isso que a pasta parece um único item enorme em qualquer ferramenta de disco.
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.rawVeja o que está ocupando o espaço
Com o Docker Desktop em execução, peça um detalhamento ao Docker. O comando abaixo lista quatro coisas: imagens, contêineres, volumes locais e cache de build, com o tamanho total de cada uma e quanto disso pode ser recuperado.
Acrescente -v para ter uma linha por imagem, contêiner e volume. Vale um minuto de leitura. Na maioria das máquinas de desenvolvimento, os itens grandes são imagens antigas e cache de build, mas, se os volumes estiverem grandes, isso são dados, e pedem mais cuidado.
docker system dfPasso 1: a limpeza segura
Comece pelo comando abaixo. Ele remove os contêineres parados, as redes que nenhum contêiner usa, as imagens pendentes (dangling), que são camadas sem tag e sem referência, e o cache de build sem uso. O Docker lista o que vai remover e pede sua confirmação.
Ele não remove imagens que têm tag, contêineres em execução nem volumes. Para muita gente, isso basta.
Nada aqui é difícil de recuperar. Um contêiner removido pode ser criado de novo a partir da imagem dele, e o cache de build só custa uma próxima compilação mais lenta. A única coisa a conferir é se um contêiner parado guarda arquivos que você gravou dentro dele e nunca copiou para fora.
docker system prunePasso 2: imagens sem uso e cache de build
Se precisar de mais, vá especificamente atrás das imagens e do cache de build.
- docker image prune -a remove todas as imagens que nenhum contêiner está usando, com tag ou sem. Você vai baixá-las ou construí-las de novo quando precisar delas.
- docker builder prune remove o cache de build. Acrescente -a para remover tudo, não só a parte pendente. Suas próximas compilações começam do zero e demoram mais.
- docker system prune -a faz as duas coisas acima junto com a limpeza do Passo 1.
- docker container ls -a mostra os contêineres parados. Um que você ainda quer pode estar mantendo uma imagem grande em uso.
Passo 3: volumes, com cuidado
Os volumes são onde os contêineres guardam os dados que devem sobreviver: arquivos de banco de dados, uploads, caches de pacotes. Limpá-los pode apagar trabalho de verdade, então olhe antes.
Liste-os com o primeiro comando abaixo e confira a quais projetos pertencem. O segundo comando remove os volumes anônimos que nenhum contêiner usa. Acrescentar -a estende isso aos volumes nomeados que nenhum contêiner usa, que é onde normalmente fica um banco de dados de desenvolvimento local.
Se um volume é importante, faça um backup dele ou um dump do banco de dados antes da limpeza. Os volumes de um projeto do Compose podem ser removidos junto com o projeto usando docker compose down -v, executado na pasta do projeto.
docker volume ls
docker volume pruneComo recuperar o espaço no Mac
Depois da limpeza, o Docker Desktop devolve ao macOS o espaço liberado dentro do disco virtual. Com o formato Docker.raw, isso normalmente acontece em instantes, embora as ferramentas que mostram o tamanho máximo do arquivo não mostrem nenhuma mudança. Execute de novo o comando ls da primeira seção para ver o número real.
Para ele não crescer tanto no futuro, abra o Docker Desktop, vá em Settings, depois Resources, e reduza o limite de uso de disco. O Docker avisa se a mudança for apagar dados existentes.
Se você quer recomeçar do zero, a tela Troubleshoot do Docker Desktop tem a opção Clean / Purge data e uma restauração dos padrões de fábrica. As duas apagam todas as imagens, contêineres e volumes.
O que não está dentro do Docker.raw
Algumas coisas ligadas ao Docker ficam fora do disco virtual. As pastas que você monta nos contêineres são pastas comuns do seu Mac e não são tocadas por nenhum prune. As pastas de projeto guardam sua própria saída de compilação, como a node_modules. E, se você remover o Docker Desktop, os auxiliares, os contêineres de grupo e a pasta ~/.docker dele ficam para trás, a não ser que você os remova também.
Onde o Diskzy entra
O Diskzy mostra no mapa do disco o tamanho real do Docker.raw, para você saber quando é hora de fazer a limpeza dentro do Docker. Ele não reduz o arquivo por você.
Se você decidir remover o Docker Desktop de vez, a aba Uninstall (Desinstalar) do Diskzy remove o app junto com o que ele deixou para trás, incluindo contêineres, agentes de inicialização e auxiliares privilegiados. Tudo vai para o Lixo.
Perguntas frequentes
- Posso apagar o Docker.raw para liberar espaço?
- Só se você quiser perder todas as imagens, contêineres e volumes. O Docker Desktop cria um novo arquivo vazio na próxima vez que iniciar. Para liberar espaço e manter o que você usa, faça a limpeza de dentro do Docker.
- Por que o Docker.raw é tão grande se tenho poucas imagens?
- O Finder muitas vezes mostra o tamanho máximo do arquivo, não o que ele usa. Confira o tamanho real com ls -klsh. Se ainda for grande, execute docker system df: o cache de build e os volumes são as causas ocultas mais comuns.
- O docker system prune apaga meus volumes?
- Não por padrão. Ele remove contêineres parados, redes sem uso, imagens pendentes e cache de build sem uso. Os volumes só são removidos se você acrescentar a flag --volumes ou executar docker volume prune.
- O espaço em disco volta depois da limpeza?
- Sim. O Docker Desktop devolve ao macOS o espaço liberado no Docker.raw pouco depois da limpeza. O tamanho máximo mostrado no Finder não muda, mas o espaço usado no disco, sim.
Guias relacionados
- Docker.raw~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
- Containers~/Library/Containers
- Group Containers~/Library/Group Containers
- node_modules<project>/node_modules
Guias de desinstalação
Veja para onde foi o espaço do seu Mac
O Diskzy mapeia o disco, explica os Dados do Sistema e limpa o que é seguro. Grátis por 72 horas, depois US$ 9 uma única vez para 2 Macs.
Experimente o Diskzy grátis