Frage So entfernen Sie alte Docker-Container


Diese Frage bezieht sich auf Sollte ich über überschüssige, nicht laufende Docker-Container besorgt sein?.

Ich frage mich, wie man alte Container entfernen kann. Das docker rm 3e552code34a Du kannst einen einzelnen entfernen, aber ich habe schon viele. docker rm --help gibt keine Auswahlmöglichkeit (wie alle oder nach Bildname).

Vielleicht gibt es ein Verzeichnis, in dem diese Container gespeichert sind, wo ich sie leicht manuell löschen kann?


985
2018-06-21 13:41


Ursprung


Antworten:


Es gibt ein neues Feature in Docker 1.13.x namens Docker Container beschneiden: docker container prune

Dies wird tun, was Sie wollen und sollte auf allen Plattformen auf die gleiche Weise funktionieren.

Da ist auch ein Dockersystem beschneiden: docker system prune, die Container, Bilder, Volumes und Netzwerke in einem einzigen Befehl aufräumt.

Ursprüngliche Antwort:

Es wurde bereits über einen Docker-Bereinigungsbefehl gesprochen. Sie können die Informationen zu diesem Ticket finden: Implementieren Sie einen 'sauberen' Befehl (# 928)

Solange dieser Befehl nicht verfügbar ist, können Sie Docker-Befehle zusammen mit anderen Unix-Befehlen zeichnen, um zu erhalten, was Sie benötigen. Hier ist ein Beispiel, wie alte Container, die Wochen alt sind, aufgeräumt werden:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

Um Kredit zu geben, wo es fällig ist, stammt dieses Beispiel aus https://twitter.com/jpetazzo/status/347431091415703552.


1100
2018-06-21 14:25



Eine andere Methode, die ich von Guillaume J. Charmes bekommen habe (Kredit, wo es fällig ist):

docker rm `docker ps --no-trunc -aq`

Entfernt alle Behälter auf elegante Weise.

Und von Bartosz Bilicki, für Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Für PowerShell:

docker rm @(docker ps -aq)

Ein Update mit Docker 1.13 (Q4 2016), Guthaben an VonC (später in diesem Thread):

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

Sehen PR 26108 und Commit 86de7c0, die einige neue Befehle einführt, die es ermöglichen, zu visualisieren, wie viel Speicherplatz die Docker-Daemon-Daten auf der Festplatte belegen, und auf einfache Weise "unnötigen" Überschuss zu beseitigen.

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

579
2017-08-09 06:41



Aktualisierte Antwort Benutzen docker system prune oder docker container prune jetzt. Sehen VonC's aktualisierte Antwort.

Vorherige Antwort Wenn Sie oben mehrere verschiedene Hinweise zusammenstellen, scheint der eleganteste Weg, alle nicht laufenden Container zu entfernen:

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

  • -q druckt nur die Container-IDs (ohne Spaltenüberschriften)
  • -f erlaubt es Ihnen, Ihre Liste der gedruckten Container zu filtern (in diesem Fall filtern wir nur die erloschenen Container)

385
2018-04-06 15:34



Der offizielle Weg ist:

docker rm `docker ps -aq`

Die Docker-Betreuer haben angegeben, dass es dafür keinen Befehl geben wird - und Sie schreiben die Befehle so:

Wir haben dies bereits besprochen und bevorzugen, dass Benutzer die obige Zeile verwenden, ohne Docker zusätzlichen Code hinzufügen zu müssen.


241
2018-06-18 04:23



Mit Docker 1.13 (Q4 2016) haben Sie jetzt:

docker system prune -a löscht alle nicht verwendeten Daten (d. h. in der Reihenfolge: Container gestoppt, Volumes ohne Container und Bilder ohne Container).

docker system prune ohne -a entfernt (für Bilder) nur dangling Bilder oder Bilder ohne ein Tag, als kommentiert durch Smilebombe.

Sehen PR 26108 und Commit 86de7c0, die einige neue Befehle einführt, die es ermöglichen, zu visualisieren, wie viel Speicherplatz die Docker-Daemon-Daten auf der Festplatte belegen, und auf einfache Weise "unnötigen" Überschuss zu beseitigen.

docker system prune -a

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

Wie wjv Bemerkungen,

Es gibt auch docker {container,image,volume,network} prune, die verwendet werden können, um unbenutzte Instanzen von just zu entfernen ein Art des Objekts.

Eingeführt in commit 913e5cb, nur für Docker 1.13+.

docker container prune

104
2017-10-04 19:51



Es ist jetzt möglich zu verwenden Filterung mit docker ps:

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

Und für Bilder:

docker rmi $(docker images -q -f "dangling=true")

Irgendwelche werden jedoch verursachen docker rm oder docker rmi einen Fehler zu werfen, wenn keine passenden Container vorhanden sind. Die älteren docker rm $(docker ps -aq) Der Trick war noch schlimmer, als er versuchte, jeden laufenden Container zu entfernen, der bei jedem fehlging.

Hier ist ein saubereres Skript, das Sie hinzufügen können ~/.bashrc oder ~/.profile :

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

Bearbeiten: Wie unten erwähnt, war die ursprüngliche Antwort zum Entfernen von Bildern, nicht von Containern. Aktualisiert, um beide zu beantworten, einschließlich neuer Links zur Dokumentation. Danke an Adrian (und Ryans Antwort) für die Erwähnung des neuen ps Filterung.


100
2018-06-23 02:07



AKTUALISIERT  2017 (NEUESTE)

docker container prune

Dies - 2017 (Alter Weg

Zu entfernen ALLE STOPPENDEN BEHÄLTER 

docker rm $(docker ps -a -q)

Zu entfernen ALLE BEHÄLTER  (Gestoppt und nicht gestoppt)

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

87
2017-08-08 20:37



Entfernen Sie alle angehaltenen Container:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Aus dem Kommentar von pauk960:

Seit Version 1.3.0 Sie können Filter mit verwenden docker ps, Anstatt von grep Exited benutzen docker ps -a -f status=exited. Und wenn du es benutzt -q Damit können Sie nur Container-IDs anstelle der vollständigen Ausgabe abrufen, ohne dafür awk verwenden zu müssen.


47
2017-07-10 16:36



Wenn Sie nicht alle Container entfernen möchten, können Sie alle Container auswählen, die vor oder nach einem bestimmten Container mit erstellt wurden docker ps --before <container-ID> oder mit docker ps --since <container-ID>. Diese Funktion ist mindestens in Docker Version 0.6.5.

Nehmen wir an, Sie haben Ihr System entwickelt, und jetzt funktioniert es, aber es gibt eine Reihe von Containern. Sie möchten Container löschen, die vor dieser Arbeitsversion erstellt wurden. Ermitteln Sie die ID des Arbeitscontainers mit docker ps.

Entfernen Sie Container, die vor einem anderen Container erstellt wurden

docker rm $(docker ps --before 9c49c11c8d21 -q)

Ein anderes Beispiel. Sie haben Ihre Datenbank bereits in einem Docker-Container ausgeführt. Sie haben Ihre Anwendung so entwickelt, dass sie auf einem anderen Container ausgeführt werden kann, und Sie haben jetzt eine Reihe nicht benötigter Container.

Entfernen Sie Container, die nach einem bestimmten Container erstellt wurden

docker rm $(docker ps --since a6ca4661ec7f -q)

Docker speichert Container in /var/lib/docker/containers in Ubuntu. Ich denke, dass zusätzliche Container keinen weiteren Schaden anrichten, aber Speicherplatz belegen.


31
2017-11-07 07:35



Aktualisieren: Ab der Docker-Version 1.13 (veröffentlicht im Januar 2017) können Sie den folgenden Befehl ausführen, um angehaltene Container, nicht verwendete Volumes, freie Bilder und nicht verwendete Netzwerke zu bereinigen:

docker system prune

Wenn Sie sicherstellen möchten, dass Sie nur Container löschen, die ein exited Status, benutze dies:

docker ps -aq -f status=exited | xargs docker rm

Ähnlich, wenn du Docker-Sachen aufräumst, kannst du ungetaggte, unbenannte Bilder auf diese Weise entfernen:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

29
2018-04-01 23:54