Atualização em setembro de 2016: o Docker 1.13: PR 26108 e o commit 86de7c0 apresentam alguns novos comandos para facilitar a visualização de quanto espaço os dados do daemon do estivador estão ocupando no disco e permitindo limpar facilmente o excesso "desnecessário".
docker system prune
excluirá TODOS os dados pendentes (ou seja, em ordem: contêineres parados, volumes sem contêineres e imagens sem contêineres). Mesmo dados não utilizados, com -a
opção.
Você também tem:
Para imagens não utilizadas , use docker image prune -a
(para remover imagens pendentes e não utilizadas).
Aviso: ' não utilizado ' significa "imagens não referenciadas por nenhum contêiner": tenha cuidado antes de usar-a
.
Como ilustrado na AL 's resposta , docker system prune --all
irá remover todos os não utilizados imagens não apenas balançando aqueles ... que pode ser um pouco demais.
Combinar docker xxx prune
com a --filter
opção pode ser uma ótima maneira de limitar a remoção ( docker SDK API 1.28 no mínimo, portanto docker 17.04+ )
Os filtros atualmente suportados são:
until (<timestamp>)
- remova apenas contêineres, imagens e redes criadas antes do carimbo de data / hora
label
( label=<key>
, label=<key>=<value>
, label!=<key>
Ou label!=<key>=<value>
) - só remover os recipientes, imagens, redes e volumes com (ou sem , no caso label!=...
é usado) os rótulos especificados.
Consulte " Remover imagens " para obter um exemplo.
Resposta original (setembro de 2016)
Eu costumo fazer:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Eu tenho um apelido para remover essas [imagens pendentes] 13 :drmi
O dangling=true
filtro encontra imagens não utilizadas
Dessa forma, qualquer imagem intermediária que não seja mais referenciada por uma imagem rotulada será removida.
Eu faço o mesmo primeiro para processos encerrados (contêineres)
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
Como haridsv aponta nos comentários :
Tecnicamente, você deve primeiro limpar os contêineres antes de limpar as imagens, pois isso captura mais imagens pendentes e menos erros .
Jess Frazelle (jfrazelle) tem a função bashrc :
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
Para remover imagens antigas e não apenas imagens "pendentes não referenciadas", considere docker-gc
:
Um contêiner Docker simples e um script de coleta de lixo de imagens.
- Os contêineres que saíram há mais de uma hora atrás são removidos.
- Imagens que não pertencem a nenhum contêiner restante depois disso são removidas.
"dangling=true"
realmente significa?dcleanup
é incrível!docker system prune
remove muito mais do que apenas imagens. Certifique-se de usar em seudocker image prune
lugar. E tenha muito cuidado com-a
: adocker system prune -a
pode ter um efeito devastador (removendo volumes também). Finalmente, sim,-a
remove imagens não utilizadas, editarei a resposta.Atualize o segundo (08/07/2017):
Consulte (novamente) o VonC, usando o ainda mais recente
system prune
. O impaciente pode ignorar o prompt com a-f, --force
opção:O impaciente e imprudente pode remover adicionalmente "imagens não utilizadas, não apenas as pendentes" com a
-a, --all
opção:https://docs.docker.com/engine/reference/commandline/system_prune/
Atualizar:
Consulte a resposta do VonC, que usa os
prune
comandos adicionados recentemente . Aqui está a conveniência do alias do shell correspondente:Resposta antiga:
Excluir contêineres parados (saídos):
Exclua imagens não utilizadas (pendentes):
Se você tiver tomado muito cuidado com relação à perda irrevogável de dados , poderá excluir volumes não utilizados (pendentes) (v1.9 e posterior):
Aqui eles estão em um conveniente apelido de shell:
Referências:
docker ps -f
docker rm
docker images -f
docker rmi
docker volume ls
docker volume rm
fonte
docker volume rm
receita. Congratulo-me com todas as sugestões que você tiver.docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm
que funcionará desde que você nunca nomeie seus volumes com algo semelhante a um guid. Eu posso ajustar isso para a nova sintaxe de filtro.Para remover imagens marcadas antigas com mais de um mês:
Observe que ele falhará ao remover imagens usadas por um contêiner, referenciadas em um repositório, com imagens filhas dependentes ... o que provavelmente é o que você deseja. Caso contrário, basta adicionar
-f
bandeira.Exemplo de
/etc/cron.daily/docker-gc
script:fonte
.CreatedSince
usa semanas como unidade de tempo na saída, mesmo em imagens com muitas semanas, por exemplo12 weeks
.docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
As outras respostas são ótimas, especificamente:
Mas eu precisava de algo no meio dos dois comandos, então a
filter
opção era o que eu precisava:Espero que ajude :)
Para referência: https://docs.docker.com/config/pruning/#prune-images
fonte
Supondo que você tenha o Docker 1.13 ou superior, basta usar os comandos de remoção. Para sua pergunta especificamente para remover imagens antigas, você quer a primeira.
Eu recomendaria não me acostumar a usar o
docker system prune
comando Eu acho que os usuários removerão acidentalmente coisas que não pretendem. Pessoalmente, vou usar principalmente os comandosdocker image prune
edocker container prune
.fonte
docker system prune
mas as ameixas individuais.Até agora (Docker versão 1.12), estamos usando o seguinte comando para excluir todos os contêineres em execução. Além disso, se quisermos excluir os volumes, podemos fazer isso manualmente usando sua respectiva tag -v no comando a seguir.
Excluir todos os contêineres encerrados
Excluir todos os contêineres parados
Excluir todos os contêineres em execução e parados
Remova todos os recipientes, sem nenhum critério
Porém, na versão 1.13 e superior, para limpeza e sistema completos, podemos usar diretamente o seguinte comando:
Todos os contêineres, imagens, redes e volumes não utilizados serão excluídos. Também podemos fazer isso usando os seguintes comandos que limpam os componentes individuais:
fonte
Isso funcionou para mim:
fonte
O comando a seguir excluirá imagens com mais de 48 horas.
fonte
docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8
e aplique um comando rmi para excluir.docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
Recentemente, escrevi um script para resolver isso em um dos meus servidores:
fonte
Aqui está um script para limpar imagens do Docker e recuperar o espaço.
Roteiro original
https://github.com/vishalvsh1/docker-image-cleanup
Normalmente, o Docker mantém todos os arquivos temporários relacionados à criação e às camadas de imagens em
/ var / lib / docker
Esse caminho é local para o sistema, geralmente na partição raiz, " " / " .
Você pode montar um espaço em disco maior e mover o conteúdo de
/var/lib/docker
para o novo local de montagem e criar um link simbólico.Dessa forma, mesmo que as imagens do Docker ocupem espaço, isso não afetará o sistema, pois estará usando outro local de montagem.
Postagem original: Gerenciar imagens do Docker no disco local
fonte
Estou usando este comando:
Isso removerá todas as imagens cujo tempo de criação é maior que 10 semanas atrás.
fonte
IMAGE_CTIME
eBEFORE_DATETIME
nesseecho
comandoSe você deseja remover imagens extraídas X meses atrás, tente o exemplo abaixo, que remove imagens criadas há três meses:
fonte
Para remover todas as imagens e volumes também
docker system prune -af --volumes
fonte
docker system prune -a
(Você será solicitado a confirmar o comando. Use
-f
para forçar a execução, se você souber o que está fazendo.)fonte
docker system prune
remover volumes nomeados-a
.O @VonC já deu uma resposta muito boa, mas, para completar, aqui está um pequeno script que eu tenho usado --- e que também destrói todos os processos do Docker, caso você tenha alguns:
fonte
Error response from daemon: You cannot remove a running container
. Adicionadodocker kill $(docker ps -q)
antes da linha 3 para o endereço$(docker images -q)
vez de$(docker images | awk '/<none>/ { print $3 }')
?docker images -q
receber um vetor de IDs de imagem, nada mais. Se eu fizer o que faço, recebo mais - permitindo que eu filtre<none>
como faço aqui. Faz sentido?Para remover imagens marcadas que não possuem contêiner em execução, você precisará usar um pequeno script:
fonte
Remova os contêineres antigos semanas atrás.
docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')
Remova as imagens antigas semanas atrás. Seja cuidadoso. Isso removerá as imagens de base criadas há semanas, mas que as novas imagens podem estar usando.
docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')
fonte
Como remover uma imagem marcada
docker rmi a tag primeiro
docker rmi a imagem.
# que pode ser feito em uma chamada do docker rmi, por exemplo: # docker rmi <repo: tag> <imageid>
(funciona em novembro de 2016, versão 1.12.2 do Docker)
por exemplo
Por exemplo, com script remova qualquer coisa com mais de 2 semanas.
fonte
-f force
-um tudo
-q no modo
fonte
ou
fonte
Ocasionalmente, tenho problemas com os quais o Docker alocará e continuará usando o espaço em disco, mesmo quando o espaço não estiver alocado para nenhuma imagem específica ou contêiner existente. A maneira mais recente de gerar esse problema acidentalmente foi usando a compilação de centos "docker-engine" em vez de "docker" no RHEL 7.1. O que parece acontecer é que, às vezes, as limpezas dos contêineres não são concluídas com êxito e o espaço nunca é reutilizado. Quando a unidade de 80 GB que aloquei como / foi preenchida com arquivos / var / lib / docker, tive que criar uma maneira criativa de resolver o problema.
Aqui está o que eu vim com. Primeiro para resolver o erro de disco cheio:
Nesse ponto, eu não tinha mais um erro de disco cheio, mas ainda estava desperdiçando uma quantidade enorme de espaço. Os próximos passos são para cuidar disso.
Iniciar Docker: systemctl start docker
Salve todas as imagens: janela de encaixe save $ (imagens de janela de encaixe | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img
Desinstale a janela de encaixe.
Apague tudo em / var / lib / docker: rm -rf / var / lib / docker / [cdintv] *
Reinstalar a janela de encaixe
Ativar janela de encaixe: systemctl enable docker
Iniciar janela de encaixe: systemctl start docker
Restaurar imagens: carregamento do docker </root/docker.img
Inicie todos os contêineres persistentes que você precisa em execução.
Isso reduziu o uso do meu disco de 67 GB para docker para 6 GB para docker.
Eu não recomendo isso para o uso diário. Mas é útil executar quando parece que o docker perdeu o controle do espaço em disco usado devido a erros de software ou reinicializações inesperadas.
fonte
Se você deseja limpar automaticamente / periodicamente os contêineres existentes e remover imagens e volumes que não estão em uso por um contêiner em execução, é possível fazer o download da imagem
meltwater/docker-cleanup
.Apenas corra:
É executado a cada 30 minutos por padrão. No entanto, você pode definir o tempo de atraso usando esse sinalizador em segundos (opção DELAY_TIME = 1800).
Mais detalhes: https://github.com/meltwater/docker-cleanup/blob/master/README.md
fonte
Se você mesmo criar essas imagens removidas (de outras imagens básicas mais antigas), tenha cuidado com as soluções aceitas acima, com base em
docker image prune
, pois o comando é brusco e tentará remover também todas as dependências exigidas pelas imagens mais recentes (o comando deve ser provavelmente renomeado paradocker image*s* prune
).A solução que eu encontrei para meus pipelines de criação de imagem de janela de encaixe (onde existem compilações diárias e tags = datas estão no
YYYYMMDD
formato) é esta:fonte
Existem docker-remove-dangling-images do plugin pardal que você pode usar para limpar contêineres parados e imagens não usadas (dangling):
$ sparrow plg run docker-remove-dangling-images
Funciona para Linux e Windows OS.
fonte
Primeiro, corra
docker images
para ver a lista de imagens e copie o IMAGE HASH ID na área de transferência.Corre
docker rmi -f <Image>
A opção Lembrar
-f
é forçar exclusão.fonte