Wie man alte Docker-Container entfernt

Diese Frage bezieht sich auf https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.

Ich frage mich, wie ich alte Container entfernen kann. Mit docker rm 3e552code34a kann man einen einzelnen Container entfernen, aber ich habe schon viele. Mit docker rm --help gibt es keine Auswahlmöglichkeit (z.B. alle oder nach Image-Name).

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

Lösung

Seit Docker 1.13.x können Sie Docker container prune verwenden:

docker container prune

Dies entfernt alle gestoppten Container und sollte auf allen Plattformen auf die gleiche Weise funktionieren.

Es gibt auch ein Docker system prune:

docker system prune

das alle unbenutzten Container, Netzwerke, Images (sowohl mit als auch ohne Referenz) und optional auch Volumes mit einem einzigen Befehl bereinigt.


Bei älteren Docker-Versionen können Sie Docker-Befehle mit anderen Unix-Befehlen verknüpfen, um das zu erhalten, was Sie brauchen. Hier ist ein Beispiel dafür, wie man alte Container aufräumt, die schon Wochen alt sind:

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

Dieses Beispiel stammt von https://twitter.com/jpetazzo/status/347431091415703552, um zu zeigen, dass es richtig ist.

Kommentare (21)

Eine andere Methode, die ich von Guillaume J. Charmes übernommen habe (Ehre, wem Ehre gebührt):

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

entfernt alle Container auf elegante Art und 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), Dank an VonC (später in diesem Thread):

docker system prune löscht ALLE unbenutzten Daten (d.h. in der Reihenfolge: gestoppte Container, Volumes ohne Container und Images ohne Container).

Siehe PR 26108 und commit 86de7c0, die ein paar neue Befehle einführen, um die Visualisierung zu erleichtern, wie viel Platz die Daten des Docker-Daemons auf der Festplatte einnehmen, und die es ermöglichen, "nicht benötigte" Überschüsse leicht zu löschen.

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
Kommentare (20)

Stoppen Sie zunächst die laufenden Container, bevor Sie versuchen, sie zu entfernen

Entfernen Sie laufende Container

docker rm $(docker stop -t=1 $(docker ps -q))

Sie können kill anstelle von stop verwenden. In meinem Fall bevorzuge ich stop, da ich dazu neige, sie zu wiederholen, anstatt jedes Mal einen neuen zu erstellen, so dass ich versuche, sie ordentlich zu beenden.

Hinweis: Der Versuch, einen Container zu stoppen, führt zu einer Fehlermeldung:

Fehler: Es ist nicht möglich, einen laufenden Container zu entfernen, bitte stoppen Sie ihn zuerst

Entferne alle Container

docker rm $(docker ps -a -q)
Kommentare (0)