Jak usunąć obraz w Dockerze?

839

Używam Dockera pod Vagrant pod OS X 10.8.4 (Mountain Lion) i za każdym razem, gdy próbuję usunąć zapisany obraz, pojawia się błąd:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

Według rmipomocy poprawna składnia jest docker rmi IMAGE [IMAGE...]i nie jestem pewien, co z tym zrobić.

Jak mogę usunąć obraz?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

Co ciekawe, kiedy biegnę docker ps, w ogóle nie pojawiają się żadne pojemniki. Uruchomienie docker imagespokazuje cztery (4) baseobrazy i jeden (1) nodeobraz.

Jules
źródło
1
Jakiej wersji dokera używasz? Czy możesz wkleić dane wyjściowe „wersji dokera” i „informacji o dokerze”? Właśnie próbowałem z mistrzem i działało dobrze.
creack
Zaktualizowałem pytanie o te informacje.
Jules
1
docker infopokazuje rzeczywistą liczbę obrazów, możesz spróbować ./docker images -a -q | sort | uniq | wc -l, powinien to być ten sam wynik (-a dla wszystkich obrazów, -q tylko dla identyfikatorów). docker pspokazuje tylko aktywne kontenery, możesz zrobić, docker ps -aaby wyświetlić listę wszystkich kontenerów
creack
Czy możesz spróbować uruchomić demona dokera z -Dopcją i klientem? docker -d -D& ; docker -D rmi <id>. Możesz też spróbować CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
creack
4
Spójrz na to żądanie ściągnięcia: github.com/dotcloud/docker/pull/1225
creack

Odpowiedzi:

1012

Spróbować docker rmi node. To powinno działać.

Wyświetlanie wszystkich utworzonych kontenerów jest tak proste, jak docker ps -a.

Aby usunąć wszystkie istniejące kontenery (nie obrazy!) Uruchom docker rm $(docker ps -aq)

Nick Stinemon
źródło
13
Jeśli niektóre z twoich kontenerów nadal działają, możesz uruchomić: docker stop $ (docker ps -qa), aby zatrzymać wszystkie kontenery. Myślę, że usunięcie działającego kontenera może nie działać, przynajmniej pamiętam, że miałem z tym problemy. Mogę się mylić… Sprawdziłem stronę podręcznika i obsługuje moją hipotezę: „-f, --force = true | false Wymusza usunięcie działającego kontenera. Domyślnie jest to fałsz”.
Konrad Kleine
1
Ach, nie wiedziałem o poleceniu „usuń cały istniejący kontener”. Napisał własny: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk „system (0 $)„ Dzięki!
Anurag
4
Wiesz, że opcje wiersza polecenia są źle zaprojektowane, gdy trzeba użyć funkcji specyficznych dla powłoki, aby osiągnąć podstawową funkcjonalność.
user3467349,
Aby usunąć wszystkie istniejące obrazy, możesz użyć - „docker rmi $ (obrazy dokerów -q)”
człowiek
Aby usunąć wszystkie istniejące kontenery za pomocą Windows PowerShell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif
565

Poniżej przedstawiono niektóre sposoby usuwania obrazów dokerów / kontenerów:

Usuń pojedynczy obraz

docker rmi image_name:version/image-id

Usuń wszystkie obrazy

docker rmi $(docker images -qf "dangling=true")

Zabij pojemniki i usuń je:

docker rm $(docker kill $(docker ps -aq))

Uwaga: Zamień na killz stopdla płynnego wyłączenia

Usuń wszystkie obrazy oprócz „my-image”

Użyj grep, aby usunąć wszystko oprócz my-imageiubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

Lub (bez awk)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))

Ulises
źródło
25
Dodanie: usuń „wiszące” obrazy (obrazy bez tagów):docker rmi $(docker images -qf "dangling=true")
kolypto
5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
BMW
1
„Usuń wszystko oprócz” bez awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie
1
@kolypto Wydaje się, że „dangling = true” nie usuwa nie wiszących pojemników. Uruchom ponownie, pomniejszając -f i zwisające flagi, aby usunąć resztę.
DougW,
1
Czy to tylko ja, czy ta ostatnia sugestia (lub (bez awk)) naprawdę nie działa?
Mike Wise,
196

Usuń wszystkie kontenery dokerów

docker rm $(docker ps -a -q)

Usuń wszystkie obrazy dokerów

docker rmi $(docker images -q)
Poczwarka
źródło
7
Usuń nieoznaczone zdjęcia:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark
1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers, sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") a następnie w celu usunięcia tagów wydań na żywo z 2015 roku (np. live-20150121223) możemy zrobić sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
odpowiednik8
Aby to wymusić, musisz napisać: docker -f rm $ (docker ps -a -q)
Adrian Lopez
71

Aby usunąć obraz z Dockera za pomocą identyfikatora obrazu:

  1. Uzyskaj listę wszystkich zdjęć

    docker images
    
  2. Wskaż identyfikator obrazu, który chcesz usunąć, na przykład:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Na koniec usuń obraz za pomocą identyfikatora obrazu (wymagane są tylko pierwsze trzy cyfry)

    docker rmi 08d
    
kweku360
źródło
1
Najpierw należy zatrzymać pojemnik i go usunąć, patrz stackoverflow.com/questions/21398087/...
vikramvi
37

Wizerunek:

  1. Lista zdjęć

    obrazy dokerów

  2. Usuń jedno zdjęcie

    docker rmi nazwa_ obrazu

  3. Wymuś usunięcie jednego obrazu

    docker rmi -f nazwa_ obrazu

Pojemnik:

  1. Wyświetl wszystkie pojemniki

    doker ps -a

  2. Wyjmij jeden pojemnik

    docker rm id_kontenera

  3. Wymuś usunięcie jednego pojemnika

    docker rm -f id_kontenera

kod hackfox
źródło
29

Zaktualizuj, zgodnie z komentarzem VonC w Jak usunąć stare kontenery Docker .

Dzięki Docker 1.13 (IV kwartał 2016 r.) Masz teraz:

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.

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
qkrijger
źródło
Dzięki za dokładną odpowiedź, ale to nie odpowiada bezpośrednio na pierwotne pytanie (na które już udzielono odpowiedzi, a którego główna odpowiedź jest nadal aktualna).
Jules
2
Zgadzam się. Ponieważ jednak tytuł tego pytania jest bardzo ogólny, stało się to w pewnym sensie pytaniem referencyjnym, więc pomyślałem, że można podać aktualizację mechanizmu.
qkrijger,
24

Usuwanie pojemników

  1. Aby usunąć określony pojemnik

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Dla pojedynczego obrazu

      docker rm  70c0e19168cf
      
    • Dla wielu zdjęć

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Usuń opuszczone pojemniki

    docker ps -a -f status=exited
    
  3. Usuń wszystkie pojemniki

    docker ps -q -a | xargs docker rm
    


Usuwanie obrazów

docker rmi IMAGE_ID
  1. Usuń określone obrazy

    • dla pojedynczego obrazu

      docker rmi ubuntu
      
    • dla wielu zdjęć

      docker rmi ubuntu alpine
      
  2. Usuń zwisające obrazy
    Zwisające obrazy to warstwy, które nie mają związku z żadnymi oznaczonymi obrazami, ponieważ obrazy Docker składają się z wielu obrazów.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Usuń wszystkie obrazy Dockera

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

Usuwanie woluminów

Aby wyświetlić listę woluminów, uruchom docker volume ls

  1. Usuń określony wolumin

    docker volume rm VOLUME_NAME
    
  2. Usuń wiszące woluminy

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Usuń pojemnik i jego objętości

    docker rm -v CONTAINER_NAME
    
Wszystko to
źródło
Dlaczego podwójna CONTAINER_ID?
Peter Mortensen
19

docker rm container_name

docker rmi image_name

docker help

rm Usuń jeden lub więcej pojemników

rmi Usuń jeden lub więcej obrazów

KunMing Xie
źródło
Dzięki, ale to pytanie ma już kilka odpowiedzi i wybraną odpowiedź, która rozwiązała problem prawie 3 lata temu.
Jules
13
docker rmi  91c95931e552

Odpowiedź błędu od demona: Konflikt, nie można usunąć 91c95931e552, ponieważ używa go kontener 76068d66b290, użyj opcji -f, aby wymusić FATA [0000] Błąd: nie udało się usunąć jednego lub więcej obrazów

Znajdź identyfikator kontenera,

# docker ps -a

# docker rm  daf644660736 
lakshmikandan
źródło
Czy to odpowiedź na pytanie?
Peter Mortensen
Dlaczego daf644660736? Jak to się ma do któregokolwiek z poprzednich?
Peter Mortensen
5

Przede wszystkim musimy zatrzymać i usunąć pojemniki Docker, które są dołączone do obrazu Docker, który zamierzamy usunąć.

Po pierwsze

  • docker stop container-id - Aby zatrzymać działający pojemnik
  • docker rm container-id - Aby usunąć / usunąć pojemnik

następnie,

  • docker rmi image-id - Aby usunąć / usunąć obraz
Murali Manchadikkal
źródło
3

Dla wersji 1.13 i wyższych:

docker image rm [OPTIONS] IMAGE [IMAGE...]

Porównywanie:

[OPTIONS]wydają się nie mieć znaczenia.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

Od: Przedstawiamy Docker 1.13

Restrukturyzacja CLI

W Docker 1.13 przegrupowaliśmy każde polecenie, aby usiąść pod logicznym obiektem, z którym wchodzi w interakcję. Na przykład listi startkontenery są teraz podkomendami docker containeri historyjest podkomendą docker image.

Te zmiany pozwalają nam oczyścić składnię interfejsu Docker CLI, ulepszyć tekst pomocy i uprościć korzystanie z Docker. Stara składnia poleceń jest nadal obsługiwana, ale zachęcamy wszystkich do przyjęcia nowej składni .

tgogos
źródło
3

Docker udostępnia polecenia do usunięcia images.

Pokaż / usuń Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

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

Możesz także użyć filterparametrów do usunięcia zestawu obrazów jednocześnie:

Przykład:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

Możesz więc usunąć takie obrazy filtrów:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")
Pan Singh
źródło
1

Usuń je wszystkie za pomocą

Krok 1: Zabij wszystkie pojemniki

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

Krok 2: RM je najpierw

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

Krok 3: Usuń obrazy przy użyciu siły

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

Wykonaj krok 1 w przypadku wystąpienia błędu informującego, że nie można go usunąć z powodu zależności potomnych

chandank
źródło
1

Jeśli chcesz automatycznie / okresowo czyścić opuszczone kontenery i usuwać obrazy i woluminy, które nie są używane przez działający kontener, możesz pobrać obraz meltwater/docker-cleanup.

Używam tego w produkcji, ponieważ wdrażamy kilka razy dziennie na wielu serwerach i nie chcę chodzić na każdy serwer, aby wyczyścić (to byłoby uciążliwe).

Po prostu biegnij:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Będzie działał co 30 minut (lub jak długo ustawisz go za pomocą opcji DELAY_TIME = 1800) i usunie opuszczone pojemniki i obrazy.

Więcej informacji: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Niewinny Anigbo
źródło
1

Oto skrypt powłoki, aby usunąć oznaczony (nazwany) obraz i jego kontenery. Zapisz jako docker-rmi i uruchom używając „docker-rmi my-image-name”

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE
Alex M.
źródło
musisz xargs -rsprawić, by działał w niepasującym pojemniku.
jak.
0

Dlaczego nikt nie wspomniał docker-compose! Właśnie używam go przez tydzień i nie mogę bez niego przeżyć. Wszystko, czego potrzebujesz, to napisać tekst, który zajmuje tylko kilka minut nauki, a następnie jesteś gotowy do pracy. Może uruchamiać obrazy, kontenery (które są potrzebne w tak zwanych usługach) i umożliwia przeglądanie dzienników, tak jak w przypadku natywnych poleceń dokera. Spróbuj:

docker-compose up -d
docker-compose down --rmi 'local'

Zanim skorzystałem z komponowania dokera, napisałem własny skrypt powłoki, a następnie musiałem go dostosowywać, gdy zajdzie taka potrzeba, szczególnie przy zmianie architektury aplikacji. Teraz nie muszę już tego robić, dzięki docker-compose.

Tiina
źródło
docker-composeto narzędzie do aranżacji i często niepraktyczne do użycia w prostych projektach. W kontekście tego pytania preferowane jest samodzielne dockerrozwiązanie (niewymagające użycia często drobnych docker-compose.ymlkonfiguracji). Ponadto istnieje już wiele dobrych odpowiedzi.
Jules
@Jules, nikt nie wspominał o docker-compose, nie oznacza, że ​​są złymi odpowiedziami, i nie oznacza to, że jest to również bezradna odpowiedź. Natywne polecenia Dockera nie są złe, ale żmudne i za każdym razem wymagają sporo pisania. „Jeden jest dobry, a drugi to za dużo”.
Tiina
-1

Dla mnie następujące działało dobrze:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

Następnie usuń obraz, uruchamiając kilka takich:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5
Julisch
źródło
-1

Lista zdjęć:

ahanjura@ubuntu:~$ sudo docker images

TAG REPOZYTORYJNY ID OBRAZU TWORZONY ROZMIAR 88282f8eda00 19 sekund temu 308,5 MB 13e5d3d682f4 19 godzin temu 663 MB busybox2 najnowszy 05fe66bb1144 20 godzin temu 1.129 MB ubuntu 16.04 00fd29ccc6f1 5 dni temu 110,5 MB ubuntu 14.04 67759a801.00e. 7e80 226092 busybox ostatnie 6ad733544a63 6 tygodni temu 1.129 MB ubuntu 16.10 7d3f705d307c 5 miesięcy temu 106,7 MB

Usuń obrazy:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Usunięte: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Odpowiedź błędu demona: konflikt: nie można usunąć 13e5d3d682f4 (należy wymusić) - obraz jest używany przez zatrzymany kontener 5593e25eb638

Usuń siłą:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

Usunięte: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf

użytkownik1833058
źródło
-1

W moim przypadku problem polega na tym, że mam zdjęcia holownicze o tej samej nazwie, rozwiązaniem jest dodanie znacznika po nazwie lub identyfikatorze

sudo docker rmi <NAME>:<TAG>

dawny:

sudo docker rmi php:7.0.4-fpm
Amirouche Zeggagh
źródło