Eu tenho alguns contêineres docker em execução no AWS EC2, a pasta / var / lib / docker / overlay2 cresce muito rápido em tamanho de disco.
Estou me perguntando se é seguro excluir seu conteúdo. ou se o docker tiver algum tipo de comando para liberar algum uso do disco.
ATUALIZAR:
Na verdade, eu docker system prune -a
já tentei , que recuperou 0Kb.
Além disso, o tamanho do meu disco / docker / overlay2 é muito maior do que a saída de docker system df
Depois de ler a documentação do docker e a resposta do BMitch, acredito que é uma ideia estúpida mexer nessa pasta e vou tentar outras maneiras de recuperar meu espaço em disco.
docker
docker-compose
docker-machine
qichao_he
fonte
fonte
docker image prune --all
e entãodocker system prune -a
. Ele recuperou meu espaço em disco em cerca de 50 GB, que estava sendo usado por arquivos em / var / lib / docker / overlay2. Mas,docker system prune -a
teria sido o suficiente. Além disso, os meus detalhes de configuração são:OS: Ubuntu 20
,Docker : 19.03.12
Respostas:
Docker uses /var/lib/docker to store your images, containers, and local named volumes. Deleting this can result in data loss and possibly stop the engine from running. The overlay2 subdirectory specifically contains the various filesystem layers for images and containers.
To cleanup unused containers and images, see
docker system prune
. There are also options to remove volumes and even tagged images, but they aren't enabled by default due to the possibility of data loss.fonte
docker system prune -a
, que recuperou 0kb de espaço. No momento, o caso para mim é que o tamanho do disco de / docker / overlay2 é muito maior do que a saída dedocker system df
. Essa é a razão pela qual eu continuo cavando esse assunto. Mais uma vez, obrigado por sua resposta, senhor. Acho que preciso ler mais sobre a documentação do docker ou provavelmente apagá-lo totalmente e reiniciá-lo. Eu só preciso manter um banco de dados postgres e o/var/lib/docker
vez de um único subdiretório que o deixaria em um estado inconsistente.Achei que funcionou melhor para mim:
Por padrão, o Docker não removerá imagens nomeadas, mesmo se não forem usadas. Este comando removerá imagens não utilizadas.
Observe que cada camada em uma imagem é uma pasta dentro da
/usr/lib/docker/overlay2/
pasta.fonte
docker system df
mostra (você pode ainda estar sem espaço e aqueleoverlay2
depósito de lixo maléfico precisa ser destruído manualmente.I had this issue... It was the log that was huge. Logs are here :
You can manage this in the run command line or in the compose file. See there : Configure logging drivers
I personally added these 3 lines to my docker-compose.yml file :
fonte
overlay2
. No meu caso, a capacidade total para/var/lib/docker
foi 50GB e 36GB do que foi consumido por um arquivo:/var/lib/docker/overlay2/<container id>/diff/var/log/faillog
. Supondo que este arquivo não seja central para manter tudo funcionando, meu hack de curto prazo é apenas removê-lo (e talvez eu também ajuste o meudocker-compose
).também teve problemas com crescimento rápido
overlay2
/var/lib/docker/overlay2
- é uma pasta onde o docker armazena camadas graváveis para seu contêiner.docker system prune -a
- pode funcionar apenas se o recipiente for parado e removido.no meu, fui capaz de descobrir o que consome espaço entrando
overlay2
investigando e investigando.essa pasta contém outras pastas nomeadas de hash. cada um deles possui várias pastas, incluindo
diff
pasta.diff
pasta - contém a diferença real escrita por um contêiner com estrutura de pasta exata como seu contêiner (pelo menos foi no meu caso - ubuntu 18 ...)então eu costumava
du -hsc /var/lib/docker/overlay2/LONGHASHHHHHHH/diff/tmp
descobrir que/tmp
dentro do meu contêiner está a pasta que fica poluída .então, como solução alternativa, usei o
-v /tmp/container-data/tmp:/tmp
parâmetro dedocker run
comando para mapear a/tmp
pasta interna para hospedar e configurar um cron no host para limpar essa pasta.A tarefa cron era simples:
sudo nano /etc/crontab
*/30 * * * * root rm -rf /tmp/container-data/tmp/*
save and exit
NOTA:
overlay2
é a pasta docker do sistema, e eles podem alterar sua estrutura a qualquer momento. Tudo acima é baseado no que eu vi lá. Tive que ir na estrutura de pasta do docker apenas porque o sistema estava completamente sem espaço e nem mesmo me permitia fazer o ssh no contêiner do docker.fonte
/var/log/apache2/error.log
. Reinicializo error.log e access.log e adiciono um novo volume paraBackgroud
A culpa pelo problema pode ser dividida entre nossa configuração incorreta dos volumes do contêiner e um problema com o vazamento do docker (falha na liberação) de dados temporários gravados nesses volumes. Devemos mapear (para hospedar pastas ou outras solicitações de armazenamento persistentes) todas as pastas temporárias / logs / scratch do nosso contêiner onde nossos aplicativos gravam com frequência e / ou pesadamente. O Docker não se responsabiliza pela limpeza de todos os chamados EmptyDirs criados automaticamente e localizados por padrão em
/var/lib/docker/overlay2/*/diff/*
. O conteúdo dessas pastas "não persistentes" deve ser removido automaticamente pelo docker após o contêiner ser interrompido, mas aparentemente não é (pode ser impossível limpar do lado do host se o contêiner ainda estiver em execução - e pode estar em execução por meses de uma vez).Gambiarra
Uma solução alternativa requer uma limpeza manual cuidadosa e, embora já tenha sido descrito em outro lugar, você ainda pode encontrar algumas dicas de meu estudo de caso, que tentei tornar o mais instrutivo e generalizável possível.
Então o que aconteceu é que o aplicativo culpado (no meu caso
clair-scanner
) conseguiu gravar ao longo de alguns meses centenas de gigs de dados na/diff/tmp
subpasta do dockeroverlay2
Assim, como todas as subpastas
/diff/tmp
eram autoexplicativas (todas tinham a mesma formaclair-scanner-*
e datas de criação obsoletas), parei o contêiner associado (docker stop clair
) e removi cuidadosamente essas subpastas obsoletasdiff/tmp
, começando prudentemente com uma única (mais antiga), e testar o impacto no motor do docker (que exigiu reiniciar [systemctl restart docker
] para recuperar espaço em disco):Recuperei centenas de GB de espaço em disco sem a necessidade de reinstalar o docker ou limpar suas pastas inteiras. Todos os contêineres em execução tiveram que ser interrompidos em um ponto, porque a reinicialização do daemon do docker foi necessária para recuperar espaço em disco, portanto, certifique-se primeiro de que seus contêineres de failover estejam funcionando corretamente em um / outro nó (s) Eu gostaria que o
docker prune
comando pudesse cobrir o obsoleto/diff/tmp
(ou mesmo/diff/*
) também (por meio de outra opção).É um problema de 3 anos agora, você pode ler sua história rica e colorida nos fóruns do Docker, onde uma variante voltada para logs de aplicativos da solução acima foi proposta em 2019 e parece ter funcionado em várias configurações: https: // forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604
fonte
AVISO: NÃO USE EM UM SISTEMA DE PRODUÇÃO
Ok, vamos primeiro tentar podar o sistema
Não tão bom, parece que limpou alguns megabytes. Vamos enlouquecer agora:
Agradável! Lembre-se de que isso NÃO é recomendado em nada além de um servidor descartável. Neste ponto, o banco de dados interno do Docker não será capaz de encontrar nenhuma dessas sobreposições e isso pode causar consequências indesejadas.
fonte
/var/lib/docker
diretório (enquanto o daemon está parado e assumindo que o diretório não contém montagens especiais de sistema de arquivos ou similares) na verdade é uma maneira rápida e suja de voltar à estaca zero. Não sei por que você está recebendo todos os votos negativos. O Docker tenta se autocurar e reconhecerá quando todas as esperanças se perderem e reinicializará o/var/lib/docker
diretório conforme necessário.NÃO FAÇA ISSO NA PRODUÇÃO
A resposta dada por @ ravi-luthra funciona tecnicamente, mas tem alguns problemas!
No meu caso, estava apenas tentando recuperar espaço em disco. A
lib/docker/overlay
pasta estava ocupando 30 GB de espaço e eu só executava alguns contêineres regularmente. Parece que o docker tem algum problema com vazamento de dados e alguns dos dados temporários não são apagados quando o contêiner para.Então fui em frente e apaguei todo o conteúdo da
lib/docker/overlay
pasta. Depois disso, minha instância do docker tornou-se inutilizável. Quando tentei executar ou construir qualquer contêiner, recebi este erro:Então, com algumas tentativas e erros, resolvi esse problema executando
(AVISO: isso excluirá todos os seus dados nos volumes do docker)
Portanto, não é recomendável fazer essas limpezas sujas, a menos que você entenda completamente como o sistema funciona.
fonte
Tudo em / var / lib / docker são sistemas de arquivos de contêineres. Se você parar todos os contêineres e removê-los, a pasta ficará vazia. Você provavelmente não quer isso, então não vá deletar coisas ali dentro. Não exclua coisas em / var / lib / docker diretamente. Você pode se safar às vezes, mas é desaconselhável por muitos motivos.
Em vez disso:
O que você verá são os arquivos maiores mostrados na parte inferior. Se você quiser, descubra em quais recipientes esses arquivos estão, insira esses recipientes com
docker exec -ti containername -- /bin/sh
e exclua alguns arquivos.Você também pode fazer
docker system prune -a -f
um cron job diário / semanal, contanto que não deixe contêineres e volumes parados de seu interesse. É melhor descobrir os motivos do crescimento e corrigi-los no nível do contêiner.fonte
Recentemente, tive um problema semelhante, overlay2 ficou cada vez maior, mas não consegui descobrir o que consumia a maior parte do espaço.
df
me mostrou que overlay2 tinha cerca de 24 GB de tamanho.Com
du
eu tentei descobrir o que ocupava o espaço ... e falhei.A diferença veio do fato de que os arquivos excluídos (principalmente arquivos de log no meu caso) ainda estavam sendo usados por um processo (Docker). Assim, o arquivo não aparece com,
du
mas o espaço que ocupa será mostrado comdf
.A reinicialização da máquina host ajudou. Reiniciar o contêiner do docker provavelmente já teria ajudado ... Este artigo em linuxquestions.org me ajudou a descobrir isso.
fonte
adicionando ao comentário acima, no qual as pessoas estão sugerindo remover o sistema como volumes pendentes, imagens, contêineres de saída etc. Às vezes, seu aplicativo se torna o culpado, ele gerou muitos logs em um curto período de tempo e se você usar um volume direto vazio (volumes locais ) isso preenche as partições / var. Nesse caso, achei o comando abaixo muito interessante de descobrir o que está consumindo espaço em meu disco de partição / var.
du -ahx / var / lib | sort -rh | cabeça -n 30
Este comando listará os 30 primeiros, que estão consumindo mais espaço em um único disco. Significa que se você estiver usando armazenamento externo com seus contêineres, consome muito tempo para executar o comando du. Este comando não contará os volumes de montagem. E é muito mais rápido. Você obterá os diretórios / arquivos exatos que estão consumindo espaço. Então você pode ir para esses diretórios e verificar quais arquivos são úteis ou não. se esses arquivos forem necessários, você pode movê-los para algum armazenamento persistente, fazendo alterações no aplicativo para usar o armazenamento persistente para esse local ou alterar a localização desses arquivos. E para descansar, você pode eliminá-los.
fonte
Você pode limpar a pasta de sobreposição do docker sem afetar as instalações do docker usando os comandos abaixo.
fonte
Eu usei "docker system prune -a" para limpar todos os arquivos em volumes e overlay2
fonte