Docker-Fehler kann Docker-Container nicht löschen, Konflikt: Repository-Referenz kann nicht entfernt werden

165

Ich möchte den Container bei Docker entfernen, aber beim Löschen tritt ein Fehler auf

Mein nächster Schritt vor dem Entfernen des Containers ist die Liste der vorhandenen Container

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)

Ich möchte die Liste löschen, nämlich "training / webapp", aber ein Fehler ist aufgetreten

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]

Ob der Container in den Bildern läuft?

Bitte helfen Sie

Yuday
quelle
Das passiert mir manchmal, aber ich kann nicht herausfinden, wie es passiert (da es mir nicht immer passiert). Wenn ich das Bild erzwinge, werden auch einige andere Dinge entfernt. Wissen Sie, was den Fehler für Sie verursacht hat? können Sie es reproduzieren?
Charlie Parker
Hervorragende aktuelle Zusammenfassung So entfernen Sie Docker-Bilder, -Container und -Volumes von Melissa Anderson im Dezember 2017 mit Filterbeispielen, Mustern usw.
Webel IT Australia - Upvoter

Antworten:

124

Es gibt einen Unterschied zwischen Docker-Images und Docker-Containern. Überprüfen Sie diese SO-Frage .

Kurz gesagt, ein Container ist eine laufende Instanz eines Bildes. Aus diesem Grund können Sie ein Bild nicht löschen, wenn ein Container aus diesem Bild ausgeführt wird. Sie müssen nur zuerst den Container löschen.

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

Update für Docker 1.13+ [Seit Januar 2017]

In Docker 1.13 haben wir jeden Befehl neu gruppiert, um unter dem logischen Objekt zu sitzen, mit dem es interagiert

Grundsätzlich könnten die obigen Befehle auch klarer umgeschrieben werden als:

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

Wenn Sie ALLES entfernen möchten, können Sie Folgendes verwenden:

docker system prune -a

WARNUNG! Dadurch wird Folgendes entfernt:

  • alle angehaltenen Container
  • Alle Netzwerke, die nicht von mindestens einem Container verwendet werden
  • alle nicht verwendeten Bilder
  • Alle bauen Cache
Ahmad Abdelghany
quelle
2
Am Ende musste ich docker rmi -f iddas Entfernen "erzwingen".
WernerCD
@WernerCD -fhilft, wenn Sie ein Bild entfernen möchten, auf das in mehreren Repositorys verwiesen wird. Dies ist ein weiterer häufiger Grund dafür, dass ein Bild nicht entfernt werden kann.
Ahmad Abdelghany
1
Erwähnenswert ist, dass docker container lsnur laufende Container aufgelistet werden. Das hat mich durcheinander gebracht, bis mir klar wurde, dass das Hinzufügen der -aFlagge alle auflistet.
MFB
@ MFB Guter Punkt. Das Flag wurde dem Befehl hinzugefügt, um die Parität zwischen den beiden Befehlssätzen aufrechtzuerhalten. Vielen Dank!
Ahmad Abdelghany
funktioniert immer noch unter OSX Docker Desktop v2.2.0.4 (Engine 19.03.8)
rrrrrraul
83

Entfernen Sie zuerst die Containernamen

$ sudo docker rm backstabbing_ritchie

Das Ergebnis

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

Löschen Sie den zweiten Teil, der auf dem zu löschenden Container aufgeführt ist

$ sudo docker rm drunk_feynman 
  drunk_feynman

Zweitens entfernen Sie den Behälter

$ sudo docker rmi training/webapp

Das Ergebnis

$ 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

Überprüfen Sie den Kontinent

  $ 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)
Yuday
quelle
6
Wenn Sie zufällig viele alte Container haben, können Sie auch Docker rm `docker ps -aq`für die Bereinigung in Betracht ziehen , anstatt sie einzeln zu entfernen. Weitere Informationen hier
Philiiiiiipp
Warum muss der Name gelöscht werden, bevor das Bild gelöscht wird? Warum sollte der Versuch, ein Bild zu löschen, ohne zuerst den Namen zu löschen, überhaupt ein Problem sein?
code_dredd
@code_dredd Es gibt kein "Löschen von Namen". Es ist der Container, der zuerst gelöscht werden muss, bevor ein Bild gelöscht wird. Weitere Informationen finden Sie unter stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany
37

Wenn Sie Docker-Images und -Container bereinigen möchten

VORSICHT: Dadurch wird alles gespült

Stoppen Sie alle Container

docker stop $(docker ps -a -q)

Entfernen Sie alle Behälter

docker rm $(docker ps -a -q)

Entfernen Sie alle Bilder

docker rmi -f $(docker images -a -q)
quAnton
quelle
Das hat funktioniert. Wenn Sie den Container anhalten, wird er weiterhin in einer Liste angezeigt. Daher müssen Sie es mit entfernen docker rm $(docker ps -a -q). Vielen Dank!
28

Mit der -fOption können Sie das Löschen der Container erzwingen.

sudo docker rmi -f training/webapp

Sie können die Verwendung der Container sudo docker stop training/webappvor dem Löschen stoppen

Saril Sudhakaran
quelle
1
Ich habe es versucht, indem ich den Container gestoppt habe. $ Sudo docker stop training / webapp Fehlerantwort vom Daemon: Keine solche ID: training / webapp Fehler: Container konnte nicht gestoppt werden: [training / webapp]
Yuday
Sie können versuchen, mit der Container-IDsudo docker stop 0bd2b54678c7
Saril Sudhakaran
23

Wenn Sie mehrere Docker-Container gestartet haben, verwenden Sie diese Option

$ docker rm $(docker ps -aq)

Es werden alle aktuellen Docker entfernt, die im Befehl "ps -aq" aufgeführt sind.

Quelle: aaam unter https://github.com/docker/docker/issues/12487

Gael
quelle
Das hat bei mir funktioniert. Nachdem ich diesen Befehl ausgeführt hatte, sollte ich dann ausführen docker image lsund dann, docker image rm Xwo jedes X von der lsAusgabe erhalten wurde.
Jftuga
5

Es wurde festgestellt, dass dies eine 2 Jahre alte Frage ist, aber ich möchte trotzdem meine Problemumgehung für diese spezielle Frage teilen:

Führen Sie docker container ls -azunächst alle Container aus, die Sie haben, und bestimmen Sie den gewünschten Löschpunkt.

Zweitens löschen Sie den Befehl mit docker container rm <CONTAINER ID>(Wenn der Container gerade ausgeführt wird, sollten Sie ihn zuerst stoppen und ausführen docker container stop <CONTAINER ID>, um den angegebenen Container ordnungsgemäß zu stoppen. Wenn er aus irgendeinem Grund nicht gestoppt wird, können Sie ihn alternativ ausführen. docker container kill <CONTAINER ID> to force shutdown of the specified container)

Drittens entfernen Sie den Container durch Ausführen docker container rm <CONTAINER ID>.

Zuletzt können Sie ausführen docker image ls -a, um alle Bilder anzuzeigen und die gewünschten Bilder durch Ausführen zu löschen docker image rm <hash>.

User3301
quelle
2

Docker-Images entfernen>

Listen Sie alle Container auf

docker container ls

Listen Sie alle Bilder auf

docker image ls

Stoppen Sie Container für Container-ID

docker container stop <container_id>

Container nach Container-ID entfernen

docker container rm <container_id>

Wenn Sie nicht anhalten und entfernen möchten, können Sie das Entfernen erzwingen

docker container rm -f <container_id>

Entferne Bild

docker image rm <image_id>

Getan!

Anthony Piñero
quelle
1

Listen Sie alle Ihre Docker-Bilder auf:

docker images

Alle vorhandenen Docker-Container auflisten:

docker ps -a

Löschen Sie alle Zielcontainer, die das zu löschende Bild verwenden:

docker rm <container-id>

Löschen Sie das Zielbild:

docker rmi <image-name:image-tag or image-id>
Mhd Medfa
quelle
0

Entfernen Sie nur die Container, die einem bestimmten Image zugeordnet sind

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: listet alle Container auf
  • grep training / webapp: filtert alles außer den Containern heraus, die vom Training / webapp-Image gestartet wurden
  • cut -d '' -f 1: listet nur die Container-IDs auf (erstes Feld, wenn durch Leerzeichen begrenzt)
  • xargs docker rm: Senden Sie die Ausgabe der Container-ID-Liste an den Befehl docker rm, um den Container zu entfernen
AndrewD
quelle