O Docker a encher o disco: imagens, volumes e registos

O Docker enche o disco do VPS por três caminhos: as imagens e camadas que ficam depois de actualizar, os volumes que ninguém usa, e os registos dos contentores, que por omissão crescem sem fim. O erro típico é «No space left on device», e o sintoma, uma base de dados que pára ou um contentor que não arranca. 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, contentores, volumes e a cache de construção, e quanto do espaço é recuperável.
3 Veja os maiores directó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 descarregar o que precisar.
Contentores 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 contentor usa docker image prune -a Médio: terá de as descarregar outra vez.
Volumes sem contentor docker volume ls e só depois docker volume rm nome Alto. Um volume pode ter a sua base de dados. Apague um a um, sabendo o que é.

Os registos que crescem sem fim

Cada contentor escreve o que a aplicação imprime num ficheiro de registo no servidor, e por omissão esse ficheiro 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 ficheiros, 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 contentores criados depois da alteração: recrie-os com docker compose up -d --force-recreate. Para libertar já o espaço de um registo gigante, como emergência: sudo truncate -s 0 $(docker inspect --format="{{.LogPath}}" nome-do-contentor).

Cuidado com o docker system prune -a --volumes. É o comando que aparece em todos os guias e é o que mais vezes apaga uma base de dados. Só o use num servidor onde sabe exactamente 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 registos 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 actualizar 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

Actualizar uma aplicação Docker sem perder dados

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

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?