To pytanie jest związane z https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
Zastanawiam się, jak usunąć stare kontenery. Polecenie docker rm 3e552code34a
pozwala usunąć pojedynczy kontener, ale mam ich już wiele. Polecenie docker rm --help
nie daje opcji wyboru (np. wszystkie, lub według nazwy obrazu).
Może jest jakiś katalog, w którym przechowywane są te kontenery, gdzie mogę je łatwo usunąć ręcznie?
Od wersji Docker 1.13.x możesz używać Docker container prune:
docker container prune
Spowoduje to usunięcie wszystkich zatrzymanych kontenerów i powinno działać na wszystkich platformach w ten sam sposób.
Istnieje również Docker system prune:
docker system prune
który wyczyści wszystkie nieużywane kontenery, sieci, obrazy (zarówno dyndające, jak i bez odniesienia), a opcjonalnie woluminy, w jednym poleceniu.
W przypadku starszych wersji Dockera, możesz łączyć polecenia Dockera z innymi poleceniami uniksowymi, aby uzyskać to, czego potrzebujesz. Oto przykład, jak wyczyścić stare kontenery, które mają kilka tygodni:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Aby dać kredyt, gdzie to jest należne, ten przykład pochodzi z https://twitter.com/jpetazzo/status/347431091415703552.
Inna metoda, którą otrzymałem od Guillaume J. Charmes (kredyt, gdzie jest to należne):
docker rm `docker ps --no-trunc -aq`
usunie wszystkie pojemniki w elegancki sposób.
I przez Bartosza Bilickiego, dla Windows:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
Dla PowerShell:
docker rm @(docker ps -aq)
Aktualizacja z Docker 1.13 (Q4 2016), kredyt dla VonC (później w tym wątku):
docker system prune
usunie WSZYSTKIE nieużywane dane (tj. w kolejności: zatrzymane kontenery, woluminy bez kontenerów i obrazy bez kontenerów).
Zobacz PR 26108 i commit 86de7c0, które wprowadzają kilka nowych komend ułatwiających wizualizację tego, ile miejsca na dysku zajmują dane demona Dockera i pozwalających łatwo wyczyścić "niepotrzebny" nadmiar.
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
Po pierwsze, zatrzymaj działające kontenery przed próbą ich usunięcia
docker rm $(docker stop -t=1 $(docker ps -q))
Możesz użyć kill
zamiast stop
. W moim przypadku wolę stop
, ponieważ mam tendencję do ponownego uruchamiania ich vs. tworzenia nowego za każdym razem, więc staram się je ładnie zamykać.
Uwaga: Próba zatrzymania kontenera da ci błąd:
Error: Impossible to remove a running container, please stop it first
docker rm $(docker ps -a -q)