To pytanie dotyczy pytania Czy należy się martwić o nadmiarowe, niedziałające pojemniki Docker? .
Zastanawiam się, jak usunąć stare pojemniki. docker rm 3e552code34a
Pozwala usunąć ani jednego, ale mam już dużo. docker rm --help
nie daje opcji wyboru (jak wszystkie lub według nazwy obrazu).
Może jest katalog, w którym przechowywane są te kontenery, w którym mogę je łatwo usunąć ręcznie?
docker run
z--rm
flagą, która stałaby się efemeryczne kontenera, usuwając wszystkie pliki kontenerów po biegu.docker system prune
polecenie. Zobacz moją odpowiedź poniżej .Portainer
możemy zarządzaćall the old containers, non using volumes and images
Jego prosty interfejs zarządzania dla dokerówPlease refer my update below on how to deploy the application
Odpowiedzi:
Od wersji Docker 1.13.x można używać przycinania kontenerów Docker :
Spowoduje to usunięcie wszystkich zatrzymanych kontenerów i powinno działać na wszystkich platformach w ten sam sposób.
Istnieje również śliwka systemowa Docker :
który wyczyści wszystkie nieużywane kontenery, sieci, obrazy (zarówno zwisające, jak i niepowiązane) oraz opcjonalnie woluminy, za pomocą jednego polecenia.
W przypadku starszych wersji Dockera możesz łączyć polecenia Docker z innymi poleceniami Unix, aby uzyskać to, czego potrzebujesz. Oto przykład, jak wyczyścić stare pojemniki, które mają tygodnie:
Aby przyznać kredyt, tam gdzie jest to należne, ten przykład pochodzi z https://twitter.com/jpetazzo/status/347431091415703552 .
źródło
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
opcję usuwania kontenerów pośrednich po pomyślnej kompilacji.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Inna metoda, którą otrzymałem od Guillaume J. Charmes (kredyt, gdzie jest to należne):
usunie wszystkie pojemniki w elegancki sposób.
Bartosz Bilicki dla systemu Windows:
W przypadku programu PowerShell:
Aktualizacja z Docker 1.13 (IV kwartał 2016), uznanie dla VonC ( później w tym wątku ):
docker system prune
usunie WSZYSTKIE nieużywane dane (tj. w kolejności: pojemniki zatrzymane, woluminy bez pojemników i obrazy bez pojemników).Zobacz PR 26108 i zatwierdź 86de7c0 , które wprowadzają kilka nowych poleceń, aby ułatwić wizualizację ilości miejsca, jaką dane demona Docker zajmuje na dysku i pozwalając na łatwe usunięcie „niepotrzebnego” nadmiaru.
źródło
docker ps -a -q | xargs docker rm
działa, (sudo może być potrzebne)docker rm $(docker ps -a -q)
?--no-trunc
ponieważ idocker rm
tak nie potrzebuje pełnych dokumentów tożsamości.Zaktualizowana odpowiedź Użyj
docker system prune
lubdocker container prune
teraz. Zobacz zaktualizowaną odpowiedź VonC .Poprzednia odpowiedź Składając się z kilku różnych wskazówek powyżej, najbardziej eleganckim sposobem na usunięcie wszystkich niedziałających pojemników wydaje się:
docker rm $(docker ps -q -f status=exited)
-q
drukuje tylko identyfikatory kontenera (bez nagłówków kolumn)-f
pozwala filtrować listę wydrukowanych pojemników (w tym przypadku filtrujemy, aby pokazać tylko opuszczone pojemniki)źródło
-v
do uniknięcia zwisające tomy:docker rm -v $(docker ps -q -f status=exited)
. Zobacz docs.docker.com/userguide/dockervolumes/…, aby uzyskać szczegółowe informacje na temat wiszących woluminów.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Oficjalny sposób to:
Opiekunowie Dockera wskazali, że nie będzie na to żadnego polecenia - a ty skomponujesz takie polecenia:
źródło
docker volume
podkomendy i nazwanych woluminów.Dzięki Docker 1.13 (IV kwartał 2016 r.) Masz teraz:
docker system prune -a
usunie WSZYSTKIE nieużywane dane (tj. w kolejności: pojemniki zatrzymane, woluminy bez pojemników i obrazy bez pojemników).docker system prune
nie będzie -a usuwania (dla obrazów) zwisające tylko zdjęć lub bez znacznika, co powiedział w smilebomb .Zobacz PR 26108 i zatwierdź 86de7c0 , które wprowadzają kilka nowych poleceń, aby ułatwić wizualizację ilości miejsca, jaką dane demona Docker zajmuje na dysku i pozwalając na łatwe usunięcie „niepotrzebnego” nadmiaru.
Jak komentuje wjv ,
Wprowadzone w commit 913e5cb , tylko dla Docker 1.13+.
źródło
-f
flagę, aby wymusić czyszczenie bez zadawania pytań.docker system prune -a
usuwania nieużywanych obrazów.docker system prune
usuwa tylko wiszące obrazy lub obrazy bez znacznika.Można teraz używać filtrowania za pomocą
docker ps
:I dla zdjęć :
Jednak każdy z nich spowoduje błąd
docker rm
lub spowodujedocker rmi
zgłoszenie błędu, gdy nie będzie pasujących pojemników. Starszadocker rm $(docker ps -aq)
sztuczka była jeszcze gorsza, ponieważ próbowała usunąć każdy działający pojemnik, zawodząc przy każdym z nich.Oto skrypt czystsze dodać w twojej
~/.bashrc
lub~/.profile
:Edycja: Jak zauważono poniżej, oryginalna odpowiedź dotyczyła usuwania obrazów, a nie pojemników. Zaktualizowano, aby odpowiedzieć na oba pytania, w tym nowe linki do dokumentacji. Podziękowania dla Adriana (i odpowiedzi Ryana) za wspomnienie o nowym
ps
filtrowaniu.źródło
storage
conatiners.status=created
aby uzyskać te, które nie są uruchomione i nigdy nie działały.AKTUALIZACJA 2019 (NAJNOWSZY)
W ten sposób - 2017 (OLD)
Aby usunąć WSZYSTKIE ZATRZYMANE POJEMNIKI
Aby usunąć WSZYSTKIE POJEMNIKI (ZATRZYMANE I NIEZATRZYMANE)
źródło
docker volume/container/image prune
, patrz stackoverflow.com/a/39860665/3625317Usuń wszystkie zatrzymane pojemniki:
Z komentarza pauk960 :
źródło
Jeśli nie chcesz usuwać wszystkich kontenerów, możesz wybrać wszystkie kontenery utworzone przed określonym kontem lub po nim za pomocą
docker ps --before <container-ID>
lub za pomocądocker ps --since <container-ID>
. Ta funkcja jest przynajmniej w wersji Docker 0.6.5.Załóżmy, że opracowałeś swój system, a teraz działa, ale pozostało wiele pojemników. Chcesz usunąć kontenery utworzone przed tą działającą wersją. Określ identyfikator pojemnika roboczego za pomocą
docker ps
.Usuń pojemniki utworzone przed innym pojemnikiem
Inny przykład. Baza danych jest już uruchomiona w kontenerze Docker. Opracowałeś aplikację do działania na innym kontenerze, a teraz masz wiele niepotrzebnych kontenerów.
Usuń pojemniki utworzone po określonym pojemniku
Docker przechowuje kontenery
/var/lib/docker/containers
w Ubuntu. Myślę, że dodatkowe kontenery nie wyrządzają żadnej innej szkody, ale zajmują miejsce na dysku.źródło
Aktualizacja: Od wersji Docker 1.13 (wydanej w styczniu 2017 r.) Możesz wydać następujące polecenie, aby wyczyścić zatrzymane kontenery, nieużywane woluminy, wiszące obrazy i nieużywane sieci:
Jeśli chcesz mieć pewność, że usuwasz tylko kontenery o
exited
statusie, użyj tego:Podobnie, jeśli czyścisz dokery, możesz pozbyć się nieoznaczonych, nienazwanych obrazów w ten sposób:
źródło
Oto mój
docker-cleanup
skrypt, który usuwa nieoznaczone pojemniki i obrazy. Sprawdź źródło wszelkich aktualizacji.Źródło: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
źródło
xargs --no-run-if-empty
opcjiNajpierw przestań uruchamiać kontenery przed próbą ich usunięcia
Usuń działające pojemniki
Możesz użyć
kill
zamiaststop
. W moim przypadku wolę,stop
ponieważ mam tendencję do ich ponownego uruchamiania zamiast tworzenia nowego za każdym razem, więc staram się je ładnie zamknąć.Uwaga: próba zatrzymania kontenera spowoduje błąd:
Usuń wszystkie pojemniki
źródło
Usuwanie wszystkich kontenerów z powłoki Windows:
źródło
https://github.com/HardySimpson/docker-cleanup
Oczyszczenie dokera
Mała, uniwersalna skorupa, która usuwa:
Zamierzają działać jako zadanie crontab
Funkcja
<none>:<none>
obrazy2>/dev/null
czy nieźródło
Tak więc osobiście polecam to zrobić jako część skryptu wdrażania dla obrazów i kontenerów, zachowując tylko najnowsze n kontenery i obrazy. Oznaczam moje obrazy Dockera tym samym schematem wersji, którego używam,
git tag
a także zawsze otaguję najnowszy obraz Dockera słowem „najnowsze”. Oznacza to, że bez niczego czyszczenia moje obrazy Dockera wyglądają następująco:Teraz oczywiście nie chcę, aby wszystkie moje obrazy (lub pojemniki) wracały do wieczności na wszystkich moich pudełkach produkcyjnych. Chcę tylko 3 lub 4 ostatnie wycofania i pozbyć się wszystkiego innego. Unix's
tail
jest tutaj twoim najlepszym przyjacielem. Ponieważdocker images
idocker ps
oba zamawiają według daty, możemy po prostutail
wybrać wszystkie oprócz trzech najlepszych i usunąć je:Uruchom to wraz ze swoimi skryptami wdrażania (lub lokalnie), aby zawsze mieć tylko wystarczającą liczbę obrazów, aby wygodnie je wycofać, nie zajmując zbyt wiele miejsca ani nie zaśmiecając starych obrazów.
Osobiście trzymam tylko jeden pojemnik na pudełku produkcyjnym w dowolnym momencie, ale możesz zrobić to samo z pojemnikami, jeśli chcesz więcej:
Wreszcie, w moim uproszczonym przykładzie, mamy do czynienia tylko z jednym repozytorium na raz, ale jeśli masz więcej, możesz stać się nieco bardziej wyrafinowany z tym samym pomysłem. Powiedzmy, że chcę zatrzymać trzy ostatnie obrazy z some_repo / some_image. Mogę po prostu wymieszać
grep
iawk
i być w drodze:Ponownie ten sam pomysł dotyczy pojemników, ale rozumiesz już do tego momentu, więc przestanę podawać przykłady.
źródło
Posługiwać się:
Mocno zatrzymuje i usuwa wszystkie pojemniki znajdujące się lokalnie.
źródło
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
jest wymagany wszędzie, chyba że dodasz użytkownika do grupy „dokerów”. Używam Ubuntu 16.10 bez sudo, dodając mojego użytkownika do grupy dokerów.Usuń 5 najstarszych pojemników:
Sprawdź, ile pozostało pojemników:
źródło
Usuń wszystkie zatrzymane pojemniki.
Spowoduje to usunięcie wszystkich zatrzymanych kontenerów poprzez pobranie listy wszystkich kontenerów z dokerem ps -a -q i przekazanie ich identyfikatorów do docker rm. Nie powinno to usuwać żadnych działających kontenerów i informuje, że nie można usunąć działającego obrazu.
Usuń wszystkie nieoznaczone obrazy
Teraz chcesz wyczyścić stare obrazy, aby zaoszczędzić trochę miejsca.
źródło
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
działa w PowerShell / Docker dla Windows.Nowy sposób: spotify / docker-gc zagraj w lewę.
Obsługuje ustawienia środowiskowe
Wymuszając usunięcie zdjęć, które mają wiele znaczników
Wymuszając usunięcie pojemników
Z wyłączeniem ostatnio opuszczonych pojemników i obrazów z wywozu śmieci
To ustawienie zapobiega również usuwaniu obrazów, które zostały utworzone mniej niż GRACE_PERIOD_SECONDS sekund temu.
Próba
Czyszczenie osieroconych pojemników CLEAN_UP_VOLUMES = 1
Odniesienie: docker-gc
Stary sposób:
usuń stare, niedziałające pojemniki
usuń wszystkie obrazy związane z niedziałającymi kontenerami dokerów
czyszczenie osieroconych woluminów dokera dla wersji dokowanej 1.10.xi wyższej
Na podstawie okresu
źródło
Usuń wszystkie procesy dokera:
Usuń określony pojemnik:
źródło
Aby usunąć wychodzące kontenery, możesz użyć następującego polecenia:
Oto pełna treść, aby również usunąć stare obrazy w oknie dokowanym : Gist, aby usunąć stare pojemniki i obrazy Docker .
źródło
źródło
Zawsze używam
docker rmi $(docker ps -a -q)
do usuwania wszystkich zdjęć.Możesz usunąć katalog,
/var/lib/docker/graph
gdy siędocker rmi
nie powiedzie.źródło
Możesz usunąć tylko zatrzymane pojemniki. Zatrzymaj je wszystkie na początku
docker stop $(docker ps -a -q)
Następnie możesz usunąć
docker rm $(docker ps -a -q)
źródło
Wypróbuj to polecenie, aby wyczyścić pojemniki i wiszące obrazy.
źródło
Podstawowe kroki, aby zatrzymać / usunąć wszystkie pojemniki i obrazy
Wyświetl wszystkie pojemniki
docker ps -aq
Zatrzymaj wszystkie działające pojemniki
docker stop $(docker ps -aq)
Usuń wszystkie pojemniki
docker rm $(docker ps -aq)
Usuń wszystkie obrazy
docker rmi $(docker images -q)
Uwaga: Najpierw musisz zatrzymać wszystkie działające pojemniki, zanim je usuniesz. Również przed usunięciem obrazu musisz zatrzymać i usunąć zależne od niego pojemniki.
źródło
Dla wszystkich zainteresowanych wziąłem przykład z qkrijger i zmieniłem go w opcję wyczyść wszystko (zatrzymaj i usuń wszystko)
źródło
docker rm -f $(docker ps --no-trunc -aq)
jest to szybszeźródło
źródło
Używam:
aby usunąć opuszczone kontenery i:
aby pozbyć się wszystkich nieoznaczonych obrazów.
źródło