Wie entfernt man ein Bild in Docker?


840

Ich führe Docker unter Vagrant unter OS X 10.8.4 (Mountain Lion) aus. Wenn ich versuche, ein gespeichertes Bild zu löschen, wird folgende Fehlermeldung angezeigt:

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

Laut der rmiHilfe ist die richtige Syntax docker rmi IMAGE [IMAGE...], und ich bin mir nicht sicher, was ich davon halten soll.

Wie kann ich ein Bild löschen?

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

 

$docker info
Containers: 1
Images: 3

Interessanterweise werden beim Laufen überhaupt docker pskeine Container angezeigt. Laufen docker imageszeigt vier (4) baseBilder und ein (1) nodeBild.


1
Welche Docker-Version verwenden Sie? Können Sie die Ausgabe von 'Docker-Version' und 'Docker-Informationen' einfügen? Ich habe es gerade mit dem Meister versucht und es hat gut funktioniert.
Knarren

Ich habe die Frage mit diesen Informationen aktualisiert.
Jules

1
docker infoZeigt die tatsächliche Anzahl der Bilder an. Sie können versuchen ./docker images -a -q | sort | uniq | wc -l, dass das gleiche Ergebnis erzielt werden soll (-a für alle Bilder, -q nur für IDs). docker pszeigt nur aktive Container, können Sie tun, docker ps -aum alle Container
aufzulisten

Können Sie versuchen, den Docker-Daemon mit -DOption und dem Client zu starten ? docker -d -D& ; docker -D rmi <id>. Kannst du es auch versuchen CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
Knarren

4
Werfen

Antworten:


1013

Versuchen Sie es docker rmi node. Das sollte funktionieren.

Das Anzeigen aller erstellten Container ist so einfach wie docker ps -a.

Um alle vorhandenen Container (keine Bilder!) Zu entfernen, führen Sie docker rm $(docker ps -aq)


13
Wenn einige Ihrer Container noch ausgeführt werden, können Sie Folgendes ausführen: docker stop $ (docker ps -qa), um alle Container zu stoppen. Ich denke, dass das Entfernen eines laufenden Containers möglicherweise nicht funktioniert, zumindest erinnere ich mich, dass ich Probleme damit hatte. Ich könnte mich irren ... Ich habe die Manpage überprüft und sie unterstützt meine Hypothese: "-f, --force = true | false Erzwingt das Entfernen des laufenden Containers. Der Standardwert ist false."
Konrad Kleine

1
Ah, ich wusste nichts über den Befehl "Alle vorhandenen Container entfernen". Hatte selbst geschrieben: Docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -rs / ^ (\ w +) / docker rm \ 1 / g '| awk 'system ($ 0)' Danke!
Anurag

4
Sie wissen, dass Befehlszeilenoptionen schlecht konzipiert sind, wenn Sie Shell-spezifische Funktionen verwenden müssen, um grundlegende Funktionen zu erreichen.
user3467349

Um alle vorhandenen Bilder zu entfernen, können Sie - "docker rmi $ (docker images -q)"
human

So entfernen Sie alle vorhandenen Container mit Windows Powershell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
Fartwhif

565

Im Folgenden finden Sie einige Möglichkeiten zum Entfernen von Docker-Images / -Containern:

Einzelbild entfernen

docker rmi image_name:version/image-id

Entfernen Sie alle Bilder

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

Töte Behälter und entferne sie:

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

Hinweis: Ersetzen Sie killdurch stopfür ein ordnungsgemäßes Herunterfahren

Entfernen Sie alle Bilder außer "Mein-Bild"

Verwenden Sie grep, um alle außer my-imageund zu entfernenubuntu

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

Oder (ohne awk)

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


25
Ergänzung: Entfernen Sie "baumelnde" Bilder (Bilder ohne Tags):docker rmi $(docker images -qf "dangling=true")
kolypto

5
sollte seindocker rm $(docker kill $(docker ps -a -q))
BMW

1
"Alle außer" entfernen ohne awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
Phobie

1
@kolypto Das "dangling = true" scheint jedoch dazu zu führen, dass nicht baumelnde Container nicht gelöscht werden. Führen Sie erneut aus, abzüglich der Flagge -f und der baumelnden Flagge, um den Rest zu entfernen.
DougW

1
Ist es nur ich oder funktioniert dieser letzte Vorschlag (oder (ohne awk)) nicht wirklich?
Mike Wise

196

Löschen Sie alle Docker-Container

docker rm $(docker ps -a -q)

Löschen Sie alle Docker-Bilder

docker rmi $(docker images -q)

7
Entfernen Sie Bilder ohne Tags: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}") und dann, um Live-Release-Tags von 2015 (zB live-20150121223) zu entfernen, können wir tun sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
Äquivalent8

Um es zu erzwingen, müssen Sie schreiben: Docker -f rm $ (Docker ps -a -q)
Adrian Lopez

71

So entfernen Sie ein Bild mithilfe der Bild-ID aus Docker:

  1. Holen Sie sich die Liste aller Bilder

    docker images
    
  2. Identifizieren Sie die Bild-ID des Bildes, das Sie löschen möchten, zum Beispiel:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Entfernen Sie das Bild schließlich mit der Bild-ID (nur die ersten drei Ziffern sind erforderlich).

    docker rmi 08d
    

1
Zuerst muss der Container angehalten
vikramvi

37

Bild:

  1. Listen Sie Bilder auf

    Docker-Bilder

  2. Entfernen Sie ein Bild

    Docker rmi Bildname

  3. Erzwinge das Entfernen eines Bildes

    Docker rmi -f Bildname

Container:

  1. Listen Sie alle Container auf

    Docker ps -a

  2. Entfernen Sie einen Behälter

    Docker rm container_id

  3. Entfernen Sie einen Behälter mit Gewalt

    Docker rm -f container_id


29

Update, wie von VonC unter Entfernen alter Docker-Container kommentiert .

Mit Docker 1.13 (4. Quartal 2016) haben Sie jetzt:

docker system prune löscht ALLE nicht verwendeten Daten (dh in der Reihenfolge: Container gestoppt, Volumes ohne Container und Bilder ohne Container).

Siehe PR 26108 und Commit 86de7c0 , in denen einige neue Befehle eingeführt werden, um die Visualisierung des Speicherplatzes der Docker-Daemon-Daten auf der Festplatte zu vereinfachen und das "Bereinigen" nicht benötigter "Überschüsse zu vereinfachen.

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

Vielen Dank für die gründliche Antwort, aber dies beantwortet nicht direkt die ursprüngliche Frage (die bereits beantwortet wurde und deren Top-Antwort noch relevant ist).
Jules

2
Genau. Da der Titel dieser Frage jedoch sehr allgemein gehalten ist, ist dies zu einer Art Referenzfrage geworden, weshalb ich dachte, dass ein Update des Mechanismus vorhanden ist.
Qkrijger

24

Behälter entfernen

  1. So entfernen Sie einen bestimmten Behälter

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Für Einzelbild

      docker rm  70c0e19168cf
      
    • Für mehrere Bilder

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Verlassene Behälter entfernen

    docker ps -a -f status=exited
    
  3. Entfernen Sie alle Behälter

    docker ps -q -a | xargs docker rm
    


Bilder entfernen

docker rmi IMAGE_ID
  1. Entfernen Sie bestimmte Bilder

    • für Einzelbild

      docker rmi ubuntu
      
    • für mehrere Bilder

      docker rmi ubuntu alpine
      
  2. Baumelnde Bilder entfernen
    Baumelnde Bilder sind Ebenen, die keine Beziehung zu markierten Bildern haben, da die Docker-Bilder aus mehreren Bildern bestehen.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Entfernen Sie alle Docker-Images

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

Volumes entfernen

Führen Sie zum Auflisten von Volumes aus docker volume ls

  1. Entfernen Sie ein bestimmtes Volume

    docker volume rm VOLUME_NAME
    
  2. Entfernen Sie baumelnde Volumes

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Entfernen Sie einen Behälter und seine Volumina

    docker rm -v CONTAINER_NAME
    

Warum verdoppeln CONTAINER_ID?
Peter Mortensen

19

docker rm container_name

docker rmi image_name

docker help

rm Entfernen Sie einen oder mehrere Behälter

rmi Entfernen Sie ein oder mehrere Bilder


Danke, aber diese Frage hat bereits mehrere Antworten und eine ausgewählte Antwort, die das Problem vor fast 3 Jahren gelöst hat.
Jules

13
docker rmi  91c95931e552

Fehlerantwort vom Dämon: Konflikt, 91c95931e552 kann nicht gelöscht werden, da der Container 76068d66b290 ihn verwendet. Verwenden Sie -f, um FATA zu erzwingen. Fehler: Ein oder mehrere Bilder konnten nicht entfernt werden

Container-ID suchen,

# docker ps -a

# docker rm  daf644660736 

Ist das eine Antwort auf die Frage?
Peter Mortensen

Warum daf644660736? Wie hängt das mit einem der vorherigen zusammen?
Peter Mortensen

5

Zunächst müssen wir die Docker-Container stoppen und entfernen, die mit dem Docker-Image verbunden sind, das wir entfernen möchten.

Also zuerst dafür

  • docker stop container-id - Um den laufenden Container zu stoppen
  • docker rm container-id - Zum Löschen / Entfernen des Containers

dann,

  • docker rmi image-id - Zum Löschen / Entfernen des Bildes

3

Für Versionen 1.13 und höher:

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

Vergleichen:

die [OPTIONS]scheinen keinen unterschied zu haben.

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

Von: Einführung in Docker 1.13

CLI umstrukturiert

In Docker 1.13 haben wir jeden Befehl neu gruppiert, um unter dem logischen Objekt zu sitzen, mit dem es interagiert. Zum Beispiel listund startvon Containern sind jetzt Unterbefehle von docker containerund historysind Unterbefehle von docker image.

Mit diesen Änderungen können wir die Docker-CLI-Syntax bereinigen, den Hilfetext verbessern und die Verwendung von Docker vereinfachen. Die alte Befehlssyntax wird weiterhin unterstützt, wir empfehlen jedoch allen, die neue Syntax zu übernehmen .


3

Docker bietet einen Befehl zum Entfernen images.

Anzeigen / Entfernen 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)

Sie können auch filterParameter verwenden, um mehrere Bilder gleichzeitig zu entfernen:

Beispiel:

$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

Sie können diese Filterbilder also wie folgt löschen:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

Löschen Sie alle mit

Schritt 1: Töte alle Container

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

Schritt 2: RM sie zuerst

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

Schritt 3: Löschen Sie die Bilder mit Gewalt

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

Verwenden Sie Schritt 1, falls Sie eine Fehlermeldung erhalten, dass er aufgrund von untergeordneten Abhängigkeiten nicht gelöscht werden kann


1

Wenn Sie verlassene Container automatisch / regelmäßig bereinigen und Images und Volumes entfernen möchten, die nicht von einem laufenden Container verwendet werden, können Sie das Image herunterladen meltwater/docker-cleanup.

Ich verwende dies in der Produktion, da wir mehrmals täglich auf mehreren Servern bereitstellen, und ich möchte nicht zu jedem Server gehen, um aufzuräumen (das wäre schmerzhaft).

Renn einfach:

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

Es wird alle 30 Minuten ausgeführt (oder wie lange Sie es mit der Option DELAY_TIME = 1800 einstellen) und bereinigte Container und Bilder bereinigen.

Weitere Details: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Hier ist ein Shell-Skript zum Entfernen eines getaggten (benannten) Bildes und seiner Container. Speichern Sie als docker-rmi und führen Sie es mit 'docker-rmi my-image-name' aus.

#!/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

Sie müssen xargs -rdafür sorgen, dass es im Fall eines nicht passenden Containers funktioniert.
als.

0

Warum niemand erwähnt docker-compose! Ich benutze es erst seit einer Woche und kann ohne es nicht überleben. Alles, was Sie brauchen, ist ein yml zu schreiben, das nur einige Minuten dauert, und dann können Sie loslegen. Es kann Images und Container booten (die in sogenannten Diensten benötigt werden) und Sie können Protokolle überprüfen, genau wie Sie es mit nativen Docker-Befehlen verwenden. Probieren Sie es aus:

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

Bevor ich Docker-Compose verwendete, schrieb ich mein eigenes Shell-Skript und musste das Skript bei Bedarf anpassen, insbesondere wenn sich die Anwendungsarchitektur änderte. Jetzt muss ich das dank Docker-Compose nicht mehr tun.


docker-composeist ein Orchestrierungswerkzeug und oft unpraktisch für die Verwendung in einfachen Projekten. Im Rahmen dieser Frage ist eine eigenständige dockerLösung docker-compose.ymlvorzuziehen (die nicht die Verwendung häufig finnicky Konfigurationen erfordert). Darüber hinaus gibt es hier bereits viele, viele gute Antworten.
Jules

@Jules niemand erwähnte Docker-Compose bedeutet nicht, dass es sich um schlechte Antworten handelt, und bedeutet auch nicht, dass dies eine hilflose Antwort ist. Native Docker-Befehle sind nicht schlecht, aber langwierig und erfordern jedes Mal eine Menge Eingabe. "Eins ist gut und zwei ist zu viel".
Tiina

-1

Für mich hat folgendes gut funktioniert:

> 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

Entfernen Sie dann ein Bild, indem Sie Folgendes ausführen:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

Bilder auflisten:

ahanjura@ubuntu:~$ sudo docker images

REPOSITORY TAG IMAGE ID ERSTELLTE GRÖSSE 88282f8eda00 vor 19 Sekunden 308,5 MB 13e5d3d682f4 vor 19 Stunden 663 MB Busybox2 letzte 05fe66bb1144 vor 20 Stunden 1.129 MB Ubuntu 16.04 00fd29ccc6f1 vor 5 Tagen 110.5 MB Ubuntu 14.04 67707 vor 80 Tagen Busybox letzte 6ad733544a63 vor 6 Wochen 1.129 MB Ubuntu 16.10 7d3f705d307c vor 5 Monaten 106.7 MB

Bilder löschen:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Gelöscht: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Fehlerantwort vom Daemon: Konflikt: 13e5d3d682f4 kann nicht gelöscht werden (muss erzwungen werden) - Image wird vom gestoppten Container 5593e25eb638 verwendet

Mit Gewalt löschen:

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

Gelöscht: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

In meinem Fall besteht das Problem darin, dass ich zwei Bilder mit demselben Namen habe. Die Lösung besteht darin, das Tag nach dem Namen oder der ID hinzuzufügen

sudo docker rmi <NAME>:<TAG>

Ex:

sudo docker rmi php:7.0.4-fpm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.