Como remover contêineres antigos do Docker


1235

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 3e552code34apermite remover um único, mas já tenho muitos. docker rm --helpnã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?


21
Você também deve considerar a limpeza de volumes de docker órfãos. Costumo achar que eles consomem muito mais espaço do que recipientes antigos e imagens antigas. Um bom script para remover volumes de docker órfãos está disponível em: github.com/chadoe/docker-cleanup-volumes .
Nemanja Trifunovic


Você também pode usar docker runcom o --rmsinalizador que tornaria o contêiner efêmero, removendo todos os arquivos do contêiner após a execução.
Gordon

12
Com a janela de encaixe 1.13 (Q4 2016), você também pode considerar o novo docker system prunecomando. Veja minha resposta abaixo .
VonC 4/16

1
Use a ferramenta de gerenciamento do docker Portainer Podemos gerenciar all the old containers, non using volumes and imagesusando essa ferramenta É uma interface de gerenciamento simples para estivadores Please refer my update below on how to deploy the application
Anish Varghese

Respostas:


1460

Desde o Docker 1.13.x, você pode usar a remoção do contêiner do Docker :

docker container prune

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 :

docker system prune

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:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

Para dar crédito, onde é devido, este exemplo é de https://twitter.com/jpetazzo/status/347431091415703552 .


92
Comando semelhante para remover todas as imagens não identificadas: docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
Mohan Raj

7
@ MichelMüller ao criar uma imagem de um arquivo docker, você pode especificar a -rmopção para remover contêineres intermediários após uma compilação bem-sucedida.
Freek Kalter

3
@ MichelMüller, as imagens são usadas para armazenar em cache, portanto, remover os contêineres não afetará isso.
Ken Cochrane

7
Se você quiser usar awk para este considerar este comando se você quiser fazer rm todos os recipientes parado (sem erro porque da primeira linha):docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
masi

3
Este deve ser o comando atualizados para a remoção de imagens sem marcasdocker rmi $(docker images -q -f dangling=true)
Ghjnut

626

Outro método, que recebi de Guillaume J. Charmes (crédito onde é devido):

docker rm `docker ps --no-trunc -aq`

removerá todos os recipientes de maneira elegante.

E por Bartosz Bilicki, para Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Para o PowerShell:

docker rm @(docker ps -aq)

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".

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

11
isso de alguma forma não funciona para mim, mas docker ps -a -q | xargs docker rmobras, (podem ser necessários sudo)
FUD

86
que tal docker rm $(docker ps -a -q)?
Qkrijger

8
@qkrijger, isso não muda nada da sua resposta original, exceto pela adição do basismo. O problema está no excesso de linha de comando. A variante xargs lida com isso de uma maneira agradável. Eu também adicionaria --no-trunk ao docker ps para evitar (improvável) confrontos de identificação.
Ihor Kaharlichenko

8
estar ciente se você utilizar os dados somente recipiente, ele vai removê-los também
Dzung Nguyen

4
Eu não entendo o motivo, --no-truncpois docker rmnão precisa de IDs completos de qualquer maneira.
Pithikos 8/08/14

411

Resposta atualizada Use docker system pruneor docker container prunenow. 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)

7
Essa deve ser a resposta correta, pois depende do docker para informar quais contêineres não são mais usados, em vez de assumir que o formato de saída de texto de $ (imagens do docker) não será alterado. Pontos de bônus por gerar apenas um processo extra em vez de dois.
Eurythmia

18
Você pode querer adicionar -vpara 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.
Rluba # 16/15

@rluba aparentemente no Docker 1.9, haverá uma API de volume separada para lidar com esse problema. github.com/docker/docker/pull/14242
Ryan Walls

um apelido pode ser útil:alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Frank Neblung 15/07/16

Diferentemente da resposta marcada como correta, a resposta @RyanWalls funciona no OSX e é mais concisa.
Raio

255

A maneira oficial é:

docker rm `docker ps -aq`

Os mantenedores do Docker indicaram que não haverá comando para isso - e você compõe os comandos assim:

Já discutimos isso antes e preferimos que os usuários usem a linha acima sem precisar adicionar código adicional ao Docker.


6
Essa é uma solução ruim, pois também excluirá os contêineres de armazenamento.
Sobrique

8
O que você quer dizer com "contêineres de armazenamento"? Se você quer dizer contêineres somente de dados que antes eram usados ​​para manter referências a volumes de dados, eles não são mais necessários devido à disponibilidade do docker volumesubcomando e volumes nomeados.
L0j1k

Observe que isso não funcionará no Windows Powershell. Para isso, esta é uma solução melhor: stackoverflow.com/a/23674294/1150683
Bram Vanroy

@Sobrique Se você não reagir, pelo menos você deve excluir seu comentário, é um absurdo quase completo e prejudicial.
peterh - Restabelece Monica

128

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 prunesem -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".

docker system prune -a

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Como comenta wjv ,

Há também docker {container,image,volume,network} prune, que pode ser usado para remover instâncias não utilizadas de apenas um tipo de objeto.

Introduzido no commit 913e5cb , apenas para o Docker 1.13+.

docker container prune

Obrigado por compartilhar - para que isto se torne visível, estou citando-lo na resposta alto no segmento
qkrijger

Como sempre, adicione o -fsinalizador para forçar a limpeza sem fazer perguntas.
Dirk

3
deve ser marcado como o nowdays resposta correta, a maioria dos acima estavam de volta no tempo certo, mas são nodays demasiado complicada
Eugen Mayer

Concordou, muito mais fácil ultimamente, até você!
Maxim Geerinck

A descrição no bloco de código é para docker system prune -a, que remove imagens não utilizadas. docker system pruneremove apenas imagens pendentes ou imagens sem uma tag.
smilebomb

104

Agora é possível usar a filtragem com docker ps:

docker rm $(docker ps -q -f status=exited)

E para imagens :

docker rmi $(docker images -q -f "dangling=true")

No entanto, qualquer um deles causará docker rmou gerará docker rmium erro quando não houver contêineres correspondentes. O docker 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 ~/.bashrcou ~/.profile:

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

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 psfiltragem.


2
Observe a verdadeira vantagem disso - você não mata acidentalmente storageconatinadores.
Sobrique

3
Você também pode usar status=createdpara obter aqueles que não estão em execução e nunca foram executados.
Enderland

96

ATUALIZADO EM 2019 (MAIS NOVO)

docker container prune

This - 2017 (OLD)

Para remover TODOS OS CONTENTORES PARADOS

docker rm $(docker ps -a -q)

Para remover TODOS OS CONTENTORES (PARADOS E NÃO PARADOS)

docker rm  -f $(docker ps -a -q)

3
downvoted, uma vez que este é com certeza não a maneira de fazer isso em 2017 - whis seria docker volume/container/image prune, consulte stackoverflow.com/a/39860665/3625317
Eugen Mayer

6
votado para contrariar o voto negativo porque a) essa resposta foi de 2016 eb) muitas pessoas não correm o risco.
afiado

49

Remova todos os contêineres parados:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Do comentário por pauk960 :

Desde a versão 1.3.0, você pode usar filtros com docker ps, em vez de grep Exitedusar docker ps -a -f status=exited. E se você usar -qcom ele, poderá obter apenas IDs de contêiner, em vez de saída total, sem precisar usar o awk para isso.


33

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

docker rm $(docker ps --before 9c49c11c8d21 -q)

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

docker rm $(docker ps --since a6ca4661ec7f -q)

O Docker armazena contêineres /var/lib/docker/containersno Ubuntu. Acho que contêineres extras não causam nenhum dano, mas ocupam espaço em disco.


32

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:

docker system prune

Se você deseja garantir que está excluindo apenas contêineres com exitedstatus, use o seguinte:

docker ps -aq -f status=exited | xargs docker rm

Da mesma forma, se você estiver limpando itens do Docker, poderá se livrar de imagens sem etiqueta e sem nome desta maneira:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

22

Aqui está o meu docker-cleanupscript, que remove contêineres e imagens sem marcação. Por favor, verifique a fonte para atualizações.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

Fonte: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


@BradMurray Thanks! Você também pode gostar destes: github.com/blueyed/dotfiles/commit/…
blueyed

3
Não funciona em OSX por causa da xargs --no-run-if-emptyopção
caktux

13

Primeiro, pare de executar contêineres antes de tentar removê-los

Remover contêineres em execução

docker rm $(docker stop -t=1 $(docker ps -q))

Você poderia usar em killvez de stop. No meu caso, prefiro, stoppois 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:

Erro: impossível remover um contêiner em execução, pare-o primeiro

Remova todos os recipientes

docker rm $(docker ps -a -q)

11

Removendo todos os contêineres do shell do Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Vou incluir isso na minha resposta, já que é a primeira página. Graças
qkrijger

"do shell do Windows" ? Você quer dizer "usando o shell do Windows (CMD)" ?
Peter Mortensen

10

https://github.com/HardySimpson/docker-cleanup

Limpeza do Docker

Um minúsculo shell tudo em um, que remove:

  • Recipientes que não estão funcionando há mais de um dia
  • Imagens que não pertencem a nenhum container restante

Pretende executar como um trabalho crontab

Característica

  • Ele removerá todos <none>:<none> imagens
  • Se a imagem tiver várias referências repo: tag, ela removerá todas as tags repo:, exceto com a execução de um contêiner. Na verdade, é uma natureza do "docker rmi".
  • Muitas mensagens de erro serão exibidas na tela e você pode decidir 2>/dev/nullou não
  • Aprenda algo com o docker-gc e corrija o problema (ele não pode remover a imagem que possui vários repositórios: tag)

9

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 tage sempre identifico a imagem mais recente do Docker como "mais recente". Isso significa que, sem limpar nada, minhas imagens do Docker acabam parecendo:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

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. Desde docker imagese docker psambos os pedidos por data, podemos usar apenas tailpara selecionar todos, exceto os três primeiros, e removê-los:

docker rmi $(docker images -q | tail -n +4)

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:

docker rm $(docker ps -aq | tail -n +4)

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 grepe awke estar no meu caminho:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

Novamente, a mesma idéia se aplica aos contêineres, mas você entende isso a esse ponto, então eu pararei de dar exemplos.


8

Usar:

docker rm -f $(docker ps -a -q)

Ele para e remove com força todos os contêineres presentes localmente.


Edite com mais informações. As respostas somente código e "tente isso" são desencorajadas, porque não contêm conteúdo pesquisável e não explicam por que alguém deveria "tentar fazer isso". Nós fazemos um esforço aqui para ser um recurso para o conhecimento.
Brian Tompsett -

No ubuntu 16.04, o docker requer sudo, então você precisa escrever sudo docker rm -f $(sudo docker ps -a -q).
Elliott

como um plus, isso também funciona no Windows sob o PowerShell!
Robert Ivanc 21/10

@ Elliott Eu acho que 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.
Emory 26/03

7

Remova os 5 contêineres mais antigos:

docker rm `docker ps -aq | tail -n 5`

Veja quantos contêineres restam:

docker ps -aq | wc -l

Bom trabalho @Pithikos. Eu adicionei a resposta que remove todos os contêineres antigos.
Mostafa Ghadimi 23/09/19

7

Remova todos os recipientes parados.

sudo docker rm $ (sudo docker ps -a -q)

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.

sudo docker rmi $ (imagens do sudo docker -q --filter "dangling = true")


Não se esqueça de excluir os volumes do docker especificando a opção -v (sudo docker rm -v $ (sudo docker ps -a -q))
vcarel

Não parecia isso, mas eu acho o mesmo que:docker ps -aq | xargs docker rm -v
Quine

Isso funciona apenas no Linux, não no Windows ... Mas docker rm -f $(docker ps -a -q)funciona no PowerShell / Docker para Windows.
Peter Mortensen

6

Nova maneira: o spotify / docker-gc faz o truque.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • Os contêineres que saíram há mais de uma hora atrás são removidos.
  • Imagens que não pertencem a nenhum container restante após a remoção

Ele suporta configurações ambientais

Forçando a exclusão de imagens com várias tags

 FORCE_IMAGE_REMOVAL=1

Forçando a exclusão de contêineres

 FORCE_CONTAINER_REMOVAL=1 

Excluindo Recipientes e Imagens Recentemente Saídos da Coleta de Lixo

 GRACE_PERIOD_SECONDS=86400

Essa configuração também impede a remoção de imagens criadas há menos de GRACE_PERIOD_SECONDS segundos atrás.

Funcionamento a seco

 DRY_RUN=1

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

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

exclua todas as imagens associadas a contêineres de docker não em execução

 docker images -q | xargs --no-run-if-empty docker rmi

limpar volumes de docker órfãos para o docker versão 1.10.xe superior

 docker volume ls -qf dangling=true | xargs -r docker volume rm

Com base no período

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

1
Alternativa interessante. 1
VonC:

6
  1. Remova todos os processos da janela de encaixe:

    docker rm $(docker ps -a -q)
    
  2. Remova o recipiente específico:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    


4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done

para aqueles que não querem procurar por si próprios github.com/spotify/docker-gc
triste

É perfeito. Também escrevi uma resposta que tem a mesma funcionalidade.
Mostafa Ghadimi 23/09/19

3

Eu sempre uso docker rmi $(docker ps -a -q)para remover todas as imagens.

Você pode remover o diretório /var/lib/docker/graphquando docker rmifalhar.


Obrigado por adicionar as informações / var / lib / docker / graph #
Jonathan DeMarks

A questão era como remover contêineres, não imagens.
pauk960

3

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)


3

Tente este comando para limpar contêineres e imagens pendentes.

docker system prune -f

Esta é uma dica profissional incrível!
b01

3

As etapas básicas para parar / remover todos os contêineres e imagens

  1. Listar todos os contêineres

    docker ps -aq

  2. Pare todos os contêineres em execução

    docker stop $(docker ps -aq)

  3. Remova todos os recipientes

    docker rm $(docker ps -aq)

  4. 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).


2

Para qualquer pessoa interessada, peguei o exemplo do qkrijger e o transformei em um tudo claro (pare e remova tudo)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`

Se você estiver removendo os recipientes de qualquer maneira, então docker rm -f $(docker ps --no-trunc -aq)é mais rápido
qkrijger

É verdade, mas se você precisar fazer o desligamento adequado para limpar os recursos compartilhados ou reutilizados (por exemplo, volumes conectados, conexões ativas corretamente fechadas etc.), será necessário ligar para parar primeiro. Ótimo exemplo, se você tiver um contêiner Jenkins, então matá-lo é uma má ideia. Você deseja que ele salve as alterações não persistentes, avise os usuários conectados e, muito importante, pare corretamente todas as compilações.
Kraig McConaghy

concordou, que é um caso de uso muito válida
qkrijger

2
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi

5
Quando você estiver respondendo, é melhor ter uma explicação sobre o que a solução faz, em vez de apenas um despejo de código; caso contrário, a resposta poderá ser excluída.
AlBlue


2

Estou a usar:

docker rm -v $(docker ps -a -q -f status=exited)

excluir contêineres encerrados e:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

para se livrar de todas as imagens não marcadas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.