Błąd platformy Docker nie może usunąć kontenera platformy Docker, konflikt: nie można usunąć odwołania do repozytorium


165

Chcę usunąć kontener w Docker, ale gdy chcesz usunąć, pojawia się błąd

Mój następny krok przed usunięciem kontenera, zobacz listę istniejących kontenerów

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

jeden Chcę usunąć listę, a mianowicie „szkolenie / aplikacja internetowa”, ale wystąpił błąd

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

Czy kontener działa w obrazach?

Proszę pomóż


czasami mi się to zdarza, ale nie jestem w stanie zrozumieć, co powoduje to zjawisko (ponieważ nie zawsze mi się to przytrafia), a jeśli wymuszę usunięcie obrazu, usunie to również wiele innych rzeczy. Czy wiesz, co spowodowało błąd? czy jesteś w stanie to odtworzyć?
— Charlie Parker

Doskonałe ostatnie podsumowanie Jak usunąć obrazy, kontenery i woluminy
— platformy

Odpowiedzi:


124

Istnieje różnica między obrazami platformy Docker a kontenerami platformy Docker. Sprawdź to pytanie SO .

Krótko mówiąc, kontener to działająca instancja obrazu. dlatego nie można usunąć obrazu, jeśli istnieje uruchomiony kontener z tego obrazu. Musisz tylko najpierw usunąć kontener.

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Aktualizacja dla Dockera 1.13+ [od stycznia 2017 r.]

W Dockerze 1.13 przegrupowaliśmy każde polecenie tak, aby znajdowało się pod obiektem logicznym, z którym współdziała

Zasadniczo powyższe polecenia można również przepisać, jaśniej, jako:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Ponadto, jeśli chcesz usunąć WSZYSTKO, możesz użyć:

docker system prune -a

OSTRZEŻENIE! Spowoduje to usunięcie:

  • wszystkie zatrzymane kontenery
  • wszystkie sieci, które nie są używane przez co najmniej jeden kontener
  • wszystkie nieużywane obrazy
  • cała pamięć podręczna kompilacji

3
Skończyło się na tym, że musiałem użyć docker rmi -f iddo „wymuszenia” usunięcia.
— WernerCD

@WernerCD -fpomaga, gdy chcesz usunąć obraz, do którego odwołuje się wiele repozytoriów, co jest kolejnym częstym powodem niepowodzenia usunięcia obrazu.
— Ahmad Abdelghany

1
Warto zauważyć, że docker container lszawiera tylko listę działających kontenerów. To mi przeszkadzało, dopóki nie zdałem sobie sprawy, że dodanie -aflagi powoduje wyświetlenie ich wszystkich.
— MFB

@MFB Słuszna uwaga. Dodano flagę do polecenia, aby zachować parzystość między dwoma zestawami poleceń. Dzięki!
— Ahmad Abdelghany

nadal działa na OSX Docker Desktop v2.2.0.4 (silnik 19.03.8)
— rrrrrraul

83

Najpierw usuń nazwy kontenerów

$ sudo docker rm backstabbing_ritchie

Wynik

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

usuń drugą część, która znajduje się na kontenerze do usunięcia

$ sudo docker rm drunk_feynman 
  drunk_feynman

Po drugie, wyjmij pojemnik

$ sudo docker rmi training/webapp

Wynik

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

Sprawdź kontynent

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)

6
Jeśli masz dużo starych kontenerów, możesz również rozważyć rm `docker ps -aq`czyszczenie przy użyciu dockera, zamiast usuwania ich pojedynczo. Więcej informacji tutaj
— Philiiiiiipp

Dlaczego konieczne jest usunięcie nazwy przed usunięciem obrazu? Dlaczego próba usunięcia obrazu bez uprzedniego usunięcia nazwy miałaby w ogóle stanowić problem?
— code_dredd

@code_dredd Nie ma czegoś takiego jak „usuwanie nazw”. Jest to kontener, który należy najpierw usunąć przed usunięciem obrazu. Więcej szczegółów na stackoverflow.com/a/40283776/1998422
— Ahmad Abdelghany

37

Jeśli chcesz wyczyścić obrazy i kontenery dockera

UWAGA: to wszystko spłukuje

zatrzymać wszystkie pojemniki

docker stop $(docker ps -a -q)

usunąć wszystkie pojemniki

docker rm $(docker ps -a -q)

usuń wszystkie obrazy

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

To się udało. Ponadto, jeśli zatrzymasz kontener, nadal będziesz go widzieć na liście. Dlatego musisz go usunąć za pomocą docker rm $(docker ps -a -q). Dzięki!

28

możesz użyć -fopcji wymuszenia usunięcia kontenerów.

sudo docker rmi -f training/webapp

Możesz zatrzymać używanie kontenerów sudo docker stop training/webappprzed usunięciem


1
Wypróbowałem to, zatrzymując kontener $ sudo docker stop training / webapp Odpowiedź na błąd od demona: brak takiego identyfikatora: szkolenie / aplikacja internetowa Błąd: nie udało się zatrzymać kontenerów: [szkolenie / aplikacja internetowa]
— Yuday

możesz spróbować zatrzymać się z dowodem tożsamości kontenera sudo docker stop 0bd2b54678c7
— Saril Sudhakaran,

23

Jeśli masz uruchomione wielokrotne kontenery docker, użyj tego

$ docker rm $(docker ps -aq)

Spowoduje to usunięcie wszystkich bieżących dokerów wymienionych w poleceniu „ps -aq”.

Źródło: aaam na https://github.com/docker/docker/issues/12487


To zadziałało dla mnie. Po uruchomieniu tego polecenia miałem uruchomić, docker image lsa następnie uzyskać docker image rm Xkażdy X z lswyjścia.
— jftuga

5

Zauważyłem, że jest to pytanie sprzed 2 lat, ale nadal chcę podzielić się moim obejściem dla tego konkretnego pytania:

Po pierwsze, uruchom docker container ls -alistę wszystkich posiadanych kontenerów i wskaż, które chcesz usunąć.

Po drugie, usuń ten za pomocą polecenia docker container rm <CONTAINER ID>(jeśli kontener jest obecnie uruchomiony, należy go najpierw zatrzymać, uruchomić, docker container stop <CONTAINER ID>aby bezpiecznie zatrzymać określony kontener, jeśli nie zatrzyma go z jakiegokolwiek powodu, alternatywnie możesz uruchomić docker container kill <CONTAINER ID> to force shutdown of the specified container).

Po trzecie, usuń pojemnik, uruchamiając docker container rm <CONTAINER ID>.

Na koniec możesz uruchomić, docker image ls -aaby wyświetlić wszystkie obrazy i usunąć ten, który chcesz, uruchamiając docker image rm <hash>.


2

Usuń obrazy dockera>

Lista wszystkich kontenerów

docker container ls

Lista wszystkich obrazów

docker image ls

Zatrzymaj kontener według identyfikatora kontenera

docker container stop <container_id>

Usuń kontener według identyfikatora kontenera

docker container rm <container_id>

Jeśli nie chcesz zatrzymać i usunąć, możesz wymusić usunięcie

docker container rm -f <container_id>

Usuń obraz

docker image rm <image_id>

Gotowe!


2

lista wszystkich obrazów dockera:

docker images

lista wszystkich istniejących kontenerów Dockera:

docker ps -a

usuń wszystkie docelowe kontenery, które używają obrazu, który chcesz usunąć:

docker rm <container-id>

usuń docelowy obraz:

docker rmi <image-name:image-tag or image-id>

0

Usuń tylko kontenery skojarzone z określonym obrazem

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: wyświetla wszystkie kontenery
  • grep training / webapp: odfiltrowuje wszystko, ale kontenery zaczynały się od obrazu szkolenia / aplikacji internetowej
  • cut -d '' -f 1: wyświetla tylko identyfikatory kontenerów (pierwsze pole, gdy jest oddzielone spacją)
  • xargs docker rm: wyślij wynik listy identyfikatorów kontenerów do polecenia docker rm, aby usunąć kontener
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.