Jak usunąć wszystkie lokalne obrazy Docker

264

Niedawno zacząłem używać Dockera i nigdy nie zdałem sobie sprawy, że powinienem używać docker-compose downzamiast ctrl-club docker-compose stopaby pozbyć się moich eksperymentów. Mam teraz lokalnie dużą liczbę niepotrzebnych obrazów dokerów.

Czy istnieje flaga, którą mogę uruchomić, aby usunąć wszystkie lokalne obrazy dokerów i kontenery?

Coś w rodzaju docker rmi --all --force--all flag nie istnieje, ale szukam czegoś z podobnym pomysłem.

Kimmo Hintikka
źródło
2
docker images purge-> usunie wszystkie obrazy dokerów
muthukumar helius
Z xargs:docker image ls -q | xargs -I {} docker image rm -f {}
arkadyt
@muthukumarhelius Myślę, że masz na myśli docker image prune(obraz jest osobliwy i śliwki zamiast oczyszczania).
Andrés Mejía

Odpowiedzi:

530

Aby usunąć wszystkie kontenery, w tym użycie woluminów,

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

Aby usunąć wszystkie obrazy,

docker rmi -f $(docker images -a -q)

Pamiętaj, że powinieneś usunąć wszystkie kontenery przed usunięciem wszystkich obrazów, z których te kontenery zostały utworzone.

Jeśli pracujesz w systemie Windows (Powershell),

$images = docker images -a -q
foreach ($image in $images) { docker image rm $image -f }
techtabu
źródło
7
unknown shorthand flag: 'a' in -apodczas bieganiadocker rmi -f $(docker images -a -q)
Ashutosh Chamoli
25
@Ashutosh Chamoli: Nie działa w CMD, działa w PowerShell.
Jack
4
docker images -a -q | % { docker image rm $_ -f }
Jednowierszowy
4
Musiałem tu być setki razy. Dziękujemy za napisanie tej odpowiedzi!
Ajay Maity
「Docker rmi -f $ (obrazy dokerów -a -q)」 to prawdziwy badass
Sinux
176

Użyj tego, aby usunąć wszystko :

docker system prune -a --volumes

Usuń wszystkie nieużywane pojemniki, woluminy, sieci i obrazy

WARNING! This will remove:
    - all stopped containers
    - all networks not used by at least one container
    - all volumes not used by at least one container
    - all images without at least one container associated to them
    - all build cache

https://docs.docker.com/engine/reference/commandline/system_prune/#extended-description

Robert
źródło
1
Jednak w rzeczywistości nie odzyskuje całego miejsca na dysku.
lucian303
@ lucian303 to podejście odzyskuje miejsce na dysku. Może masz do czynienia z konkretnym problemem.
Robert,
Wydaje mi się, że osiągam pożądany rezultat tylko wtedy, gdy to robię, i kroki w odpowiedzi
@techtabu
31

Aby po prostu wyczyścić wszystko:

$ docker system prune --all

Wszystko oznacza:

  • wszystkie zatrzymane pojemniki
  • wszystkie sieci nieużywane przez co najmniej jeden kontener
  • wszystkie obrazy bez co najmniej jednego powiązanego z nimi pojemnika
  • wszystkie budują pamięć podręczną
Renatex
źródło
25

docker image prune -a

Usuń wszystkie nieużywane obrazy, nie tylko wiszące. Dodaj -fopcję, aby wymusić.

Lokalna wersja dokera: 17.09.0-ce, Git commit: afdb6d4, OS / Arch: darwin / amd64

$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=<timestamp>')
  -f, --force           Do not prompt for confirmation
      --help            Print usage
Robert Ranjan
źródło
7

Proste i wygodne polecenia

Aby usunąć wszystkie obrazy

docker rmi $(docker images -a)

Aby usunąć kontenery, które są w stanie wyjściowym

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

Aby usunąć kontenery, które są w stanie utworzonym

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

UWAGA: Usuń wszystkie pojemniki, a następnie usuń obrazy

Deep Nirmal
źródło
aby usunąć wszystkie obrazy, powinno być - „docker rmi $ (obrazy dokera -a -q)”. -q zwraca tylko identyfikatory obrazu
Jimmy MG Lim
oznacza to, że usunął te obrazy. Ponownie sprawdź ponownie
Deep Nirmal,
3

Aby usunąć wszystkie obrazy:

docker rmi -f $(docker images -a | awk {'print $3'})

Wyjaśnienie:

obrazy dokerów -a | awk {'print $ 3'}

To polecenie zwróci wszystkie identyfikatory obrazów, a następnie użyje ich do usunięcia obrazu za pomocą swojego identyfikatora.

PalFS
źródło
3

Usuń bez wywoływania okna dokowanego :

rm -rf /var/lib/docker

Nie jest to zalecane, jeśli możesz normalnie uruchomić dokera, ale jeśli z jakichkolwiek powodów nie możesz lub nie chcesz, to zadziała.

VasiliNovikov
źródło
2

Możesz spróbować w ten sposób:

docker system prune
Bablu Ahmed
źródło
W moim przypadku spowoduje to usunięcie woluminu, którego nadal używam. Nie używaj tego, jeśli nie wiesz, co to robi
Zach Smith,
2

Aby usunąć wszystkie obrazy:

docker rmi $(docker images -a -q)

gdzie -a jest wszystkim, a -q zwraca tylko identyfikatory obrazu

Aby usunąć nieużywane obrazy i pojemniki:

docker system prune

Uwaga: jeśli używasz roju dokerów, a lokalna maszyna dołącza do zdalnego roju (jako menedżer / pracownik), lokalna będzie wdrożonym repozytorium. wykonanie tego spowoduje usunięcie wdrożonych obrazów.

Jimmy MG Lim
źródło
2
docker rmi $(docker images -q) --force
simencore
źródło
2
Powinieneś dodać jakieś wyjaśnienie, zostawiając odpowiedź na poście, aby inni znajdujący ją później mogli ją zrozumieć.
Morphyish,
1

Dodając do zaakceptowanej odpowiedzi techtabu, jeśli używasz dokera w systemie Windows, możesz użyć następującego polecenia

for /F "delims=" %A in ('docker ps -a -q') do docker rm %A

tutaj polecenie docker ps -a -qwyświetla wszystkie obrazy i ta lista jest przekazywana dodocker rm jeden po drugim

zobacz to, aby uzyskać więcej informacji o tym, jak ten typ formatu poleceń działa w Windows cmd.

corvo
źródło
1

Innym sposobem jest xargs

docker image ls -q | xargs -I {} docker image rm -f {}
arkadyt
źródło
0

Aby usunąć wszystkie lokalne obrazy Docker, wykonaj 2 kroki:

krok 1: obrazy dokerów (wymień wszystkie obrazy dokerów z identyfikatorami)

     example :
     REPOSITORY    TAG    IMAGE ID            CREATED             SIZE
     pradip564/my  latest 31e522c6cfe4        3 months ago        915MB

krok 2: obraz dokera rm 31e522c6cfe4 (ID OBRAZU)

      OUTPUT : image deleted
Debasis Das
źródło