O Docker enchendo o disco: imagens, volumes e registros

Node.js, Python e DockerDocker e contêineres··· 1.045 visualizações· 3 min de leitura

O Docker enche o disco do VPS por três caminhos: as imagens e camadas que ficam depois de atualizar, os volumes que ninguém usa, e os registros dos contêineres, que por padrão crescem sem fim. O erro típico é «No space left on device», e o sintoma, um banco de dados que para ou um contêiner que não inicia. Primeiro mede-se; depois limpa-se o que se tem a certeza de poder perder.

Primeiro: onde está o espaço

1 Veja o disco todo: df -h. Procure a linha da partição principal e a coluna «Use%».
2 Veja o que é do Docker: docker system dfMostra imagens, contêineres, volumes e o cache de construção, e quanto do espaço é recuperável.
3 Veja os maiores diretórios do sistema, se o Docker não explica tudo: sudo du -xh --max-depth=1 /var | sort -hOs dados do Docker ficam, normalmente, em /var/lib/docker.

Limpar, do mais seguro ao mais arriscado

O que ocupa Comando Risco
Imagens sem nome ou sem uso docker image prune Baixo: volta a baixar o que precisar.
Contêineres parados docker container prune Baixo, mas veja primeiro com docker ps -a o que lá está.
Cache de construção docker builder prune Baixo: as construções seguintes ficam mais lentas.
Todas as imagens que nenhum contêiner usa docker image prune -a Médio: terá de as baixar outra vez.
Volumes sem contêiner docker volume ls e só depois docker volume rm nome Alto. Um volume pode ter o seu banco de dados. Apague um a um, sabendo o que é.

Os registros que crescem sem fim

Cada contêiner escreve o que a aplicação imprime num arquivo de registro no servidor, e por padrão esse arquivo não tem limite. Uma aplicação faladora, ou uma que falha em ciclo, pode encher o disco só com isso. Para o ver: sudo du -sh /var/lib/docker/containers. A solução é limitar o tamanho e o número de arquivos, no Compose:services:
  app:
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
Os valores são exemplos; escolha os seus. A regra vale para os contêineres criados depois da alteração: recrie-os com docker compose up -d --force-recreate. Para liberar já o espaço de um registro gigante, como emergência: sudo truncate -s 0 $(docker inspect --format="{{.LogPath}}" nome-do-contêiner).

Cuidado com o docker system prune -a --volumes. É o comando que aparece em todos os guias e é o que mais vezes apaga um banco de dados. Só o use num servidor onde sabe exatamente o que há em cada volume, e com cópia feita. Em caso de dúvida, os comandos mais seguros da tabela acima chegam.
Ponha um limite desde o início. Os registros limitados e uma verificação do disco de vez em quando evitam a emergência. Se o disco do plano é pequeno para o que corre nele, veja os erros comuns em VPS e Cloud, e como atualizar sem perder dados para não acumular imagens.

O disco encheu e já não consegue entrar por SSH? Abra um pedido: ajudamos a recuperar o acesso. Decidir o que apagar dentro do servidor é consigo.

Abrir um pedido de suporte

VEJA TAMBÉM

Erros comuns em VPS e Cloud: SSH, memória, disco e reinícios

Atualizar uma aplicação Docker sem perder dados

Cópias de um VPS: instantâneos ou arquivos

PRODUTO RECOMENDADO

Servidor VPS com acesso root

Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.