Esta pergunta está relacionada a Devo me preocupar com contêineres do Docker em excesso e sem execução? .
Eu estou querendo saber como remover recipientes antigos. O docker rm 3e552code34a
permite remover um único, mas já tenho muitos. docker rm --help
não fornece uma opção de seleção (como tudo ou pelo nome da imagem).
Talvez exista um diretório no qual esses contêineres sejam armazenados onde eu possa excluí-los facilmente manualmente?
docker run
com o--rm
sinalizador que tornaria o contêiner efêmero, removendo todos os arquivos do contêiner após a execução.docker system prune
comando. Veja minha resposta abaixo .Portainer
Podemos gerenciarall the old containers, non using volumes and images
usando essa ferramenta É uma interface de gerenciamento simples para estivadoresPlease refer my update below on how to deploy the application
Respostas:
Desde o Docker 1.13.x, você pode usar a remoção do contêiner do Docker :
Isso removerá todos os contêineres parados e deve funcionar em todas as plataformas da mesma maneira.
Há também uma remoção do sistema Docker :
que limpará todos os contêineres não utilizados, redes, imagens (tanto pendentes quanto não referenciadas) e, opcionalmente, volumes, em um comando.
Para versões mais antigas do Docker, é possível combinar os comandos do Docker com outros comandos do Unix para obter o que você precisa. Aqui está um exemplo de como limpar contêineres antigos com semanas de vida:
Para dar crédito, onde é devido, este exemplo é de https://twitter.com/jpetazzo/status/347431091415703552 .
fonte
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
opção para remover contêineres intermediários após uma compilação bem-sucedida.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Outro método, que recebi de Guillaume J. Charmes (crédito onde é devido):
removerá todos os recipientes de maneira elegante.
E por Bartosz Bilicki, para Windows:
Para o PowerShell:
Uma atualização com o Docker 1.13 (quarto trimestre de 2016), creditada ao VonC ( posteriormente neste segmento ):
docker system prune
excluirá TODOS os dados não utilizados (ou seja, em ordem: contêineres parados, volumes sem contêineres e imagens sem contêineres).Consulte PR 26108 e confirme 86de7c0 , que estão apresentando alguns novos comandos para ajudar a facilitar a visualização de quanto espaço os dados do daemon do Docker estão ocupando no disco e permitindo limpar facilmente o excesso "desnecessário".
fonte
docker ps -a -q | xargs docker rm
obras, (podem ser necessários sudo)docker rm $(docker ps -a -q)
?--no-trunc
poisdocker rm
não precisa de IDs completos de qualquer maneira.Resposta atualizada Use
docker system prune
ordocker container prune
now. Veja a resposta atualizada do VonC .Resposta anterior Ao compor várias dicas diferentes acima, a maneira mais elegante de remover todos os contêineres que não estão em execução parece ser:
docker rm $(docker ps -q -f status=exited)
-q
imprime apenas os IDs do contêiner (sem cabeçalhos de coluna)-f
permite filtrar sua lista de contêineres impressos (neste caso, estamos filtrando para mostrar apenas os contêineres existentes)fonte
-v
para evitar balançando volumes:docker rm -v $(docker ps -q -f status=exited)
. Consulte docs.docker.com/userguide/dockervolumes/… para obter detalhes sobre volumes pendentes.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
A maneira oficial é:
Os mantenedores do Docker indicaram que não haverá comando para isso - e você compõe os comandos assim:
fonte
docker volume
subcomando e volumes nomeados.Com o Docker 1.13 (quarto trimestre de 2016), agora você tem:
docker system prune -a
excluirá TODOS os dados não utilizados (ou seja, em ordem: contêineres parados, volumes sem contêineres e imagens sem contêineres).docker system prune
sem -a removerá (para imagens) apenas imagens pendentes ou imagens sem uma tag, como comentado por smilebomb .Ver PR 26108 e confirmar 86de7c0 , que estão apresentando alguns novos comandos para ajudar a facilitar a visualização de quanto espaço os dados do daemon do Docker estão ocupando no disco e permitindo limpar facilmente o excesso "desnecessário".
Como comenta wjv ,
Introduzido no commit 913e5cb , apenas para o Docker 1.13+.
fonte
-f
sinalizador para forçar a limpeza sem fazer perguntas.docker system prune -a
, que remove imagens não utilizadas.docker system prune
remove apenas imagens pendentes ou imagens sem uma tag.Agora é possível usar a filtragem com
docker ps
:E para imagens :
No entanto, qualquer um deles causará
docker rm
ou gerarádocker rmi
um erro quando não houver contêineres correspondentes. Odocker rm $(docker ps -aq)
truque mais antigo foi ainda pior, pois tentou remover qualquer contêiner em execução, falhando em cada um.Aqui está um script mais limpo para adicionar no seu
~/.bashrc
ou~/.profile
:Editar: Como observado abaixo, a resposta original foi para remover imagens, não recipientes. Atualizado para responder a ambos, incluindo novos links para a documentação. Agradecemos a Adrian (e a resposta de Ryan) por mencionar a nova
ps
filtragem.fonte
storage
conatinadores.status=created
para obter aqueles que não estão em execução e nunca foram executados.ATUALIZADO EM 2019 (MAIS NOVO)
This - 2017 (OLD)
Para remover TODOS OS CONTENTORES PARADOS
Para remover TODOS OS CONTENTORES (PARADOS E NÃO PARADOS)
fonte
docker volume/container/image prune
, consulte stackoverflow.com/a/39860665/3625317Remova todos os contêineres parados:
Do comentário por pauk960 :
fonte
Se você não quiser remover todos os contêineres, poderá selecionar todos os contêineres criados antes ou depois de um contêiner específico com
docker ps --before <container-ID>
ou comdocker ps --since <container-ID>
. Esse recurso está presente no Docker versão 0.6.5.Digamos que você tenha desenvolvido seu sistema, e agora ele está funcionando, mas há vários contêineres restantes. Você deseja remover os contêineres criados antes dessa versão de trabalho. Determine o ID do contêiner de trabalho com
docker ps
.Remover contêineres criados antes de outro contêiner
Outro exemplo. Você já possui seu banco de dados em execução em um contêiner do Docker. Você desenvolveu seu aplicativo para execução em outro contêiner e agora possui vários contêineres desnecessários.
Remover contêineres criados após um determinado contêiner
O Docker armazena contêineres
/var/lib/docker/containers
no Ubuntu. Acho que contêineres extras não causam nenhum dano, mas ocupam espaço em disco.fonte
Atualização: A partir do Docker versão 1.13 (lançada em janeiro de 2017), você pode emitir o seguinte comando para limpar contêineres parados, volumes não utilizados, imagens pendentes e redes não utilizadas:
Se você deseja garantir que está excluindo apenas contêineres com
exited
status, use o seguinte:Da mesma forma, se você estiver limpando itens do Docker, poderá se livrar de imagens sem etiqueta e sem nome desta maneira:
fonte
Aqui está o meu
docker-cleanup
script, que remove contêineres e imagens sem marcação. Por favor, verifique a fonte para atualizações.Fonte: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
fonte
xargs --no-run-if-empty
opçãoPrimeiro, pare de executar contêineres antes de tentar removê-los
Remover contêineres em execução
Você poderia usar em
kill
vez destop
. No meu caso, prefiro,stop
pois tento reexecutá-los versus criar um novo a cada vez, então tento desativá-los bem.Nota: Tentar parar um contêiner gera um erro:
Remova todos os recipientes
fonte
Removendo todos os contêineres do shell do Windows:
fonte
https://github.com/HardySimpson/docker-cleanup
Limpeza do Docker
Um minúsculo shell tudo em um, que remove:
Pretende executar como um trabalho crontab
Característica
<none>:<none>
imagens2>/dev/null
ou nãofonte
Portanto, pessoalmente, recomendo fazer isso como parte do script de implantação de imagens e contêineres, mantendo apenas os n contêineres e imagens mais recentes. Eu codifico minhas imagens do Docker com o mesmo esquema de versão que utilizo
git tag
e sempre identifico a imagem mais recente do Docker como "mais recente". Isso significa que, sem limpar nada, minhas imagens do Docker acabam parecendo:Agora, é claro, não quero manter todas as minhas imagens (ou contêineres) voltando à perpetuidade em todas as minhas caixas de produção. Eu só quero os últimos 3 ou 4 para reversões e me livrar de todo o resto. O Unix's
tail
é seu melhor amigo aqui. Desdedocker images
edocker ps
ambos os pedidos por data, podemos usar apenastail
para selecionar todos, exceto os três primeiros, e removê-los:Execute isso junto com os scripts de implantação (ou localmente) para manter sempre imagens suficientes o suficiente para reverter confortavelmente, sem ocupar muito espaço ou sobrecarregar as imagens antigas.
Pessoalmente, só mantenho um contêiner na minha caixa de produção a qualquer momento, mas você pode fazer o mesmo com os contêineres se quiser mais:
Finalmente, no meu exemplo simplificado, estamos lidando apenas com um repositório de cada vez, mas se você tiver mais, poderá ficar um pouco mais sofisticado com a mesma idéia. Digamos que eu apenas queira manter as três últimas imagens de some_repo / some_image. Eu só posso misturar
grep
eawk
e estar no meu caminho:Novamente, a mesma idéia se aplica aos contêineres, mas você entende isso a esse ponto, então eu pararei de dar exemplos.
fonte
Usar:
Ele para e remove com força todos os contêineres presentes localmente.
fonte
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
é necessário em todos os lugares, a menos que você adicione seu usuário ao grupo 'docker'. Eu uso o ubuntu 16.10 sem sudo adicionando meu usuário ao grupo docker.Remova os 5 contêineres mais antigos:
Veja quantos contêineres restam:
fonte
Remova todos os recipientes parados.
Isso removerá todos os contêineres parados, obtendo uma lista de todos os contêineres com o docker ps -a -q e passando seus IDs para o docker rm. Isso não deve remover nenhum contêiner em execução e indica que não é possível remover uma imagem em execução.
Remova todas as imagens não marcadas
Agora você deseja limpar imagens antigas para economizar espaço.
fonte
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
funciona no PowerShell / Docker para Windows.Nova maneira: o spotify / docker-gc faz o truque.
Ele suporta configurações ambientais
Forçando a exclusão de imagens com várias tags
Forçando a exclusão de contêineres
Excluindo Recipientes e Imagens Recentemente Saídos da Coleta de Lixo
Essa configuração também impede a remoção de imagens criadas há menos de GRACE_PERIOD_SECONDS segundos atrás.
Funcionamento a seco
Limpando volumes de contêineres órfãos CLEAN_UP_VOLUMES = 1
Referencia: docker-gc
Maneira antiga de fazer:
excluir contêineres antigos que não estejam em execução
exclua todas as imagens associadas a contêineres de docker não em execução
limpar volumes de docker órfãos para o docker versão 1.10.xe superior
Com base no período
fonte
Remova todos os processos da janela de encaixe:
Remova o recipiente específico:
fonte
Você pode usar o seguinte comando para remover os contêineres encerrados:
Aqui está o resumo completo para remover também as imagens antigas do docker: Gist para remover os contêineres e imagens antigos do Docker .
fonte
fonte
Eu sempre uso
docker rmi $(docker ps -a -q)
para remover todas as imagens.Você pode remover o diretório
/var/lib/docker/graph
quandodocker rmi
falhar.fonte
Você pode remover apenas contêineres parados. Pare todos eles no começo
docker stop $(docker ps -a -q)
Então você pode remover
docker rm $(docker ps -a -q)
fonte
Tente este comando para limpar contêineres e imagens pendentes.
fonte
As etapas básicas para parar / remover todos os contêineres e imagens
Listar todos os contêineres
docker ps -aq
Pare todos os contêineres em execução
docker stop $(docker ps -aq)
Remova todos os recipientes
docker rm $(docker ps -aq)
Remova todas as imagens
docker rmi $(docker images -q)
Nota: Primeiro você deve parar todos os contêineres em execução antes de removê-los. Antes de remover uma imagem, também é necessário parar e remover o (s) contêiner (s) dependente (s).
fonte
Para qualquer pessoa interessada, peguei o exemplo do qkrijger e o transformei em um tudo claro (pare e remova tudo)
fonte
docker rm -f $(docker ps --no-trunc -aq)
é mais rápidofonte
fonte
Estou a usar:
excluir contêineres encerrados e:
para se livrar de todas as imagens não marcadas.
fonte