Esta pergunta está relacionada com https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
I'estou a pensar como remover recipientes velhos. O docker rm 3e552code34a
permite remover um único, mas eu já tenho muitos. O docker rm --help
doesn't dá uma opção de seleção (como todos, ou pelo nome da imagem).
Talvez haja um diretório no qual esses recipientes sejam armazenados onde eu possa apagá-los manualmente com facilidade?
Desde Docker 1.13.x você pode usar Docker poda contentor:
docker container prune
Isto irá remover todos os contentores parados e deverá funcionar em todas as plataformas da mesma forma.
Existe também uma poda Docker system:
docker system prune
que irá limpar todos os contentores não utilizados, redes, imagens (tanto oscilantes como não referenciadas), e opcionalmente, volumes, em um único comando.
Para versões mais antigas do Docker, você pode adicionar comandos Docker junto com outros comandos Unix para obter o que você precisa. Aqui está um exemplo de como limpar recipientes antigos que têm semanas:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Para dar crédito, onde ele é devido, este exemplo é de https://twitter.com/jpetazzo/status/347431091415703552.
Outro método, que recebi do Guillaume J. Charmes (crédito onde é devido):
docker rm `docker ps --no-trunc -aq`
irá remover todos os recipientes de uma forma 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 Docker 1.13 (Q4 2016), crédito para VonC (mais tarde neste tópico):
docker system prune
irá apagar TODOS os dados não utilizados (ou seja, em ordem: contentores parados, volumes sem contentores e imagens sem contentores).
Veja PR 26108 e commit 86de7c0, que estão introduzindo alguns novos comandos para ajudar a facilitar a visualização de quanto espaço os dados do daemon 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
Primeiro, pare de correr os recipientes antes de tentar removê-los.
docker rm $(docker stop -t=1 $(docker ps -q))
Você poderia usar "matar" em vez de "parar". No meu caso eu prefiro stop
, já que eu tenho a tendência de reprise em vez de criar um novo cada vez, então eu tento desligá-los bem.
Nota: Tentar parar um recipiente vai dar-lhe um erro:
Erro: Impossível remover um recipiente em funcionamento, por favor pare-o primeiro
docker rm $(docker ps -a -q)