Diese Frage bezieht sich auf Sollte ich mir Sorgen über überschüssige, nicht laufende Docker-Container machen? .
Ich frage mich, wie ich alte Behälter entfernen soll. Mit docker rm 3e552code34a
können Sie eine einzelne entfernen, aber ich habe bereits viele. docker rm --help
gibt keine Auswahloption an (wie alle oder nach Bildnamen).
Vielleicht gibt es ein Verzeichnis, in dem diese Container gespeichert sind, in dem ich sie einfach manuell löschen kann?
docker run
das--rm
Flag verwenden, das den Container kurzlebig macht und alle Containerdateien nach dem Ausführen entfernt.docker system prune
Befehl berücksichtigen . Siehe meine Antwort unten .Portainer
Wir können esall the old containers, non using volumes and images
mit diesem Tool verwalten. Es ist eine einfache Verwaltungs-Benutzeroberfläche für DockerPlease refer my update below on how to deploy the application
Antworten:
Seit Docker 1.13.x können Sie Docker Container Prune verwenden :
Dadurch werden alle gestoppten Container entfernt und sollten auf allen Plattformen gleich funktionieren.
Es gibt auch eine Docker-Systembeschneidung :
Dadurch werden alle nicht verwendeten Container, Netzwerke, Bilder (sowohl baumelnd als auch nicht referenziert) und optional Volumes in einem Befehl bereinigt.
Bei älteren Docker-Versionen können Sie Docker-Befehle mit anderen Unix-Befehlen verknüpfen, um das zu erhalten, was Sie benötigen. Hier ist ein Beispiel zum Reinigen alter Behälter, die Wochen alt sind:
Dieses Beispiel stammt von https://twitter.com/jpetazzo/status/347431091415703552 .
quelle
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
Option angeben , Zwischencontainer nach einem erfolgreichen Build zu entfernen.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Eine andere Methode, die ich von Guillaume J. Charmes bekommen habe (Gutschrift, wo sie fällig ist):
entfernt alle Behälter auf elegante Weise.
Und von Bartosz Bilicki für Windows:
Für PowerShell:
Ein Update mit Docker 1.13 (4. Quartal 2016), Dank an VonC ( später in diesem Thread ):
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.
quelle
docker ps -a -q | xargs docker rm
funktioniert (Sudo kann benötigt werden)docker rm $(docker ps -a -q)
?--no-trunc
da ichdocker rm
sowieso keine vollständigen IDs benötige.Aktualisierte Antwort Verwenden Sie
docker system prune
oderdocker container prune
jetzt. Siehe VonCs aktualisierte Antwort .Vorherige Antwort Wenn Sie oben verschiedene Hinweise zusammenstellen, scheint die eleganteste Methode zum Entfernen aller nicht laufenden Container zu sein:
docker rm $(docker ps -q -f status=exited)
-q
druckt nur die Container-IDs (ohne Spaltenüberschriften)-f
Mit dieser Option können Sie Ihre Liste der gedruckten Container filtern (in diesem Fall wird gefiltert, um nur verlassene Container anzuzeigen).quelle
-v
, um baumelnde Volumes zu vermeiden :docker rm -v $(docker ps -q -f status=exited)
. Weitere Informationen zu baumelnden Volumes finden Sie unter docs.docker.com/userguide/dockervolumes/… .alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Der offizielle Weg ist:
Die Docker-Betreuer haben angegeben, dass hierfür kein Befehl vorhanden ist - und Sie setzen die folgenden Befehle zusammen:
quelle
docker volume
Unterbefehlen und benannten Volumes nicht mehr erforderlich .Mit Docker 1.13 (4. Quartal 2016) haben Sie jetzt:
docker system prune -a
löscht ALLE nicht verwendeten Daten (dh in der Reihenfolge: Container gestoppt, Volumes ohne Container und Bilder ohne Container).docker system prune
ohne -a werden (für Bilder) nur baumelnde Bilder oder Bilder ohne Tag entfernt, wie von smilebomb kommentiert .Sehen 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.
Wie wjv kommentiert,
Eingeführt in Commit 913e5cb , nur für Docker 1.13+.
quelle
-f
Flag hinzu, um die Bereinigung zu erzwingen, ohne dass Fragen gestellt werden.docker system prune -a
, wodurch nicht verwendete Bilder entfernt werden. Entferntdocker system prune
nur baumelnde Bilder oder Bilder ohne Tag.Es ist jetzt möglich, Filterung zu verwenden mit
docker ps
:Und für Bilder :
Jeder dieser Fehler verursacht
docker rm
oderdocker rmi
löst jedoch einen Fehler aus, wenn keine übereinstimmenden Container vorhanden sind. Die älterendocker rm $(docker ps -aq)
Trick war noch schlimmer, als er versuchte, einen laufenden Container zu entfernen, was bei jedem fehlschlug.Hier ist ein saubereres Skript, das Sie in Ihr
~/.bashrc
oder hinzufügen können~/.profile
:Bearbeiten: Wie unten angegeben, war die ursprüngliche Antwort das Entfernen von Bildern, nicht von Containern. Aktualisiert, um beide Fragen zu beantworten, einschließlich neuer Links zur Dokumentation. Vielen Dank an Adrian (und Ryans Antwort) für die Erwähnung der neuen
ps
Filterung.quelle
storage
Conatiners ab.status=created
solche verwenden, die nicht ausgeführt werden und noch nie ausgeführt wurden.AKTUALISIERT 2019 (NEUESTE)
Dies - 2017 (ALTER) Weg
So entfernen Sie ALLE STOPPED CONTAINER
ALLE BEHÄLTER entfernen (STOPPED UND NON STOPPED)
quelle
docker volume/container/image prune
, siehe stackoverflow.com/a/39860665/3625317Entfernen Sie alle angehaltenen Behälter:
Aus dem Kommentar von pauk960 :
quelle
Wenn Sie nicht alle Container entfernen möchten, können Sie alle Container auswählen, die vor oder nach einem bestimmten Container mit
docker ps --before <container-ID>
oder mit erstellt wurdendocker ps --since <container-ID>
. Diese Funktion ist mindestens in Docker Version 0.6.5 verfügbar.Angenommen, Sie haben Ihr System entwickelt und jetzt funktioniert es, aber es sind noch einige Container übrig. Sie möchten Container entfernen, die vor dieser Arbeitsversion erstellt wurden. Bestimmen Sie die ID des Arbeitscontainers mit
docker ps
.Entfernen Sie Container, die vor einem anderen Container erstellt wurden
Ein anderes Beispiel. Ihre Datenbank wird bereits auf einem Docker-Container ausgeführt. Sie haben Ihre Anwendung für die Ausführung auf einem anderen Container entwickelt und verfügen nun über eine Reihe nicht benötigter Container.
Entfernen Sie Container, die nach einem bestimmten Container erstellt wurden
Docker speichert Container
/var/lib/docker/containers
in Ubuntu. Ich denke, zusätzliche Container schaden nicht weiter, beanspruchen aber Speicherplatz.quelle
Update: Ab Docker Version 1.13 (veröffentlicht im Januar 2017) können Sie den folgenden Befehl ausführen, um gestoppte Container, nicht verwendete Volumes, baumelnde Images und nicht verwendete Netzwerke zu bereinigen:
Wenn Sie sicherstellen möchten, dass Sie nur Container mit
exited
Status löschen, verwenden Sie Folgendes :Wenn Sie Docker-Inhalte bereinigen, können Sie unmarkierte, unbenannte Bilder auf folgende Weise entfernen:
quelle
Hier ist mein
docker-cleanup
Skript, das Container und Bilder ohne Tags entfernt. Bitte überprüfen Sie die Quelle auf Aktualisierungen.Quelle: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
quelle
xargs --no-run-if-empty
OptionBeenden Sie zunächst die Ausführung von Containern, bevor Sie versuchen, sie zu entfernen
Laufende Behälter entfernen
Sie könnten
kill
anstelle von verwendenstop
. In meinem Fall bevorzuge ich es,stop
da ich dazu neige, sie erneut auszuführen, anstatt jedes Mal eine neue zu erstellen, also versuche ich, sie schön herunterzufahren.Hinweis: Wenn Sie versuchen, einen Container anzuhalten, wird folgende Fehlermeldung angezeigt:
Entfernen Sie alle Behälter
quelle
Entfernen aller Container aus der Windows-Shell:
quelle
https://github.com/HardySimpson/docker-cleanup
Docker-Bereinigung
Eine winzige All-in-One-Hülle, die entfernt:
Beabsichtigt, als Crontab-Job zu laufen
Merkmal
<none>:<none>
Bilder entfernt2>/dev/null
oder nichtquelle
Ich persönlich empfehle daher, dies als Teil Ihres Bereitstellungsskripts für Images und Container zu tun und nur die neuesten n Container und Images beizubehalten. Ich markiere meine Docker-Images mit demselben Versionsschema, mit dem ich sie verwende, und
git tag
markiere das neueste Docker-Image immer mit "Neueste". Dies bedeutet, dass meine Docker-Bilder ohne Bereinigung wie folgt aussehen:Jetzt möchte ich natürlich nicht, dass alle meine Bilder (oder Container) auf allen meinen Produktionsboxen auf Dauer zurückkehren. Ich möchte nur die letzten 3 oder 4 für Rollbacks und um alles andere loszuwerden. Unix
tail
ist dein bester Freund hier. Dadocker images
unddocker ps
beide nach Datum sortieren, können wir nurtail
alle außer den ersten drei auswählen und entfernen:Führen Sie dies zusammen mit Ihren Bereitstellungsskripten (oder lokal) aus, um immer gerade genug Bilder zu behalten, damit Sie bequem zurücksetzen können, ohne zu viel Platz zu beanspruchen oder Dinge mit alten Bildern zu überladen.
Persönlich habe ich immer nur einen Container auf meiner Produktionsbox, aber Sie können das Gleiche mit Containern tun, wenn Sie mehr wollen:
Schließlich haben wir es in meinem vereinfachten Beispiel immer nur mit einem Repository zu tun, aber wenn Sie mehr hatten, können Sie mit derselben Idee nur ein bisschen ausgefeilter werden. Angenommen, ich möchte nur die letzten drei Bilder von some_repo / some_image behalten. Ich kann einfach mischen
grep
undawk
und sein auf dem Weg:Auch hier gilt die gleiche Idee für Container, aber Sie bekommen sie zu diesem Zeitpunkt, sodass ich keine Beispiele mehr geben werde.
quelle
Verwenden:
Alle lokal vorhandenen Container werden gewaltsam angehalten und entfernt.
quelle
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
ist überall erforderlich, es sei denn, Sie fügen Ihren Benutzer der Docker-Gruppe hinzu. Ich verwende Ubuntu 16.10 ohne Sudo, indem ich meinen Benutzer zur Docker-Gruppe hinzufüge.Entfernen Sie 5 älteste Behälter:
Sehen Sie, wie viele Container noch übrig sind:
quelle
Entfernen Sie alle angehaltenen Behälter.
Dadurch werden alle gestoppten Container entfernt, indem eine Liste aller Container mit Docker ps -a -q abgerufen und ihre IDs an Docker rm übergeben werden. Dadurch sollten keine laufenden Container entfernt werden, und es wird angezeigt, dass ein laufendes Image nicht entfernt werden kann.
Entfernen Sie alle Bilder ohne Tags
Jetzt möchten Sie alte Bilder bereinigen, um Platz zu sparen.
quelle
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
in PowerShell / Docker für Windows.Neuer Weg: spotify / docker-gc spielen den Streich.
Es wurden Umgebungseinstellungen unterstützt
Erzwingen des Löschens von Bildern mit mehreren Tags
Löschen von Containern erzwingen
Ausgenommen kürzlich verlassene Container und Bilder aus der Garbage Collection
Diese Einstellung verhindert auch das Entfernen von Bildern, die vor weniger als GRACE_PERIOD_SECONDS erstellt wurden.
Probelauf
Bereinigen verwaister Containervolumes bereinigen CLEAN_UP_VOLUMES = 1
Referenz: docker-gc
Alte Art zu tun:
Löschen Sie alte, nicht laufende Container
Löschen Sie alle Bilder, die nicht laufenden Docker-Containern zugeordnet sind
Bereinigen Sie verwaiste Docker-Volumes für Docker-Version 1.10.x und höher
Basierend auf dem Zeitraum
quelle
Entfernen Sie alle Docker-Prozesse:
Entfernen Sie einen bestimmten Behälter:
quelle
Mit dem folgenden Befehl können Sie die verlassenen Container entfernen:
Hier ist der vollständige Inhalt, um auch die alten Bilder auf Docker zu entfernen : Inhalt, um alte Docker-Container und Bilder zu entfernen .
quelle
quelle
Ich benutze immer
docker rmi $(docker ps -a -q)
, um alle Bilder zu entfernen.Sie können das Verzeichnis entfernen,
/var/lib/docker/graph
wenn diesdocker rmi
fehlschlägt.quelle
Sie können nur gestoppte Container entfernen. Stoppen Sie alle am Anfang
docker stop $(docker ps -a -q)
Dann können Sie entfernen
docker rm $(docker ps -a -q)
quelle
Versuchen Sie diesen Befehl, um Container und baumelnde Bilder zu reinigen.
quelle
Die grundlegenden Schritte zum Stoppen / Entfernen aller Container und Bilder
Listen Sie alle Container auf
docker ps -aq
Stoppen Sie alle laufenden Container
docker stop $(docker ps -aq)
Entfernen Sie alle Behälter
docker rm $(docker ps -aq)
Entfernen Sie alle Bilder
docker rmi $(docker images -q)
Hinweis: Zuerst müssen Sie alle laufenden Container stoppen, bevor Sie sie entfernen. Bevor Sie ein Bild entfernen, müssen Sie die abhängigen Container anhalten und entfernen.
quelle
Für alle Interessierten habe ich das Beispiel von qkrijger genommen und daraus ein klares Alles gemacht (stoppen und alles entfernen)
quelle
docker rm -f $(docker ps --no-trunc -aq)
ist es schnellerquelle
quelle
Ich benutze:
um verlassene Container zu löschen und:
um alle nicht getaggten Bilder loszuwerden.
quelle