it-swarm.com.de

So entfernen Sie alte Docker-Container

Diese Frage bezieht sich auf Sollte ich mir Gedanken über übermäßige, nicht laufende Docker-Container machen?.

Ich frage mich, wie ich alte Container entfernen soll. Mit dem docker rm 3e552code34a können Sie einen einzelnen entfernen, aber ich habe bereits viele. docker rm --help bietet keine Auswahlmöglichkeit (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?

1133
qkrijger

Seit Docker 1.13.x können Sie Docker Container Prune verwenden:

docker container Prune

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

Es gibt auch ein Docker-System Prune :

docker system Prune

mit diesem Befehl werden alle nicht verwendeten Container, Netzwerke, Images (sowohl baumelnde als auch nicht referenzierte) und optional Volumes in einem Befehl bereinigt.


Bei älteren Docker-Versionen können Sie Docker-Befehle mit anderen Unix-Befehlen kombinieren, um das zu erhalten, was Sie benötigen. Hier ist ein Beispiel, wie alte Container, die Wochen alt sind, bereinigt 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, ist dieses Beispiel von https://Twitter.com/jpetazzo/status/347431091415703552 .

1309
Ken Cochrane

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 (4. Quartal 2016), gutgeschrieben 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 Images ohne Container).

Siehe PR 26108 und commit 86de7c , die einige neue Befehle einführen, um die Visualisierung des Speicherplatzes der Docker-Daemon-Daten auf der Festplatte zu vereinfachen und eine einfache Bereinigung zu ermöglichen. " nicht benötigter "Überschuss.

_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
_
620
qkrijger

Aktualisierte Antwort Verwenden Sie jetzt docker system Prune oder docker container Prune. Siehe VonCs aktualisierte Antwort .

Vorherige Antwort Der eleganteste Weg, um alle nicht laufenden Container zu entfernen, scheint darin zu bestehen, mehrere verschiedene Hinweise oben zu formulieren:

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

  • -q druckt nur die Container-IDs (ohne Spaltenüberschriften)
  • -f ermöglicht es Ihnen, Ihre Liste der gedruckten Container zu filtern (in diesem Fall filtern wir, um nur verlassene Container anzuzeigen).
407
Ryan Walls

Der offizielle Weg ist:

docker rm `docker ps -aq`

Die Docker-Betreuer haben angegeben, dass es hierfür keinen Befehl gibt - und Sie verfassen die Befehle folgendermaßen:

Wir haben dies bereits zuvor erörtert und ziehen es vor, dass Benutzer die obige Zeile verwenden, ohne zusätzlichen Code zu Docker hinzufügen zu müssen.

250
Michael Neale

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 mit keine Behälter).

_docker system Prune_ ohne -a entfernt (für Bilder) nur baumelnde Bilder oder Bilder ohne Tag, wie kommentiert ​​von smilebomb .

Siehe PR 26108 und commit 86de7c , die ein paar neue Befehle einführen, um zu veranschaulichen, wie viel Speicherplatz die Docker-Daemon-Daten auf der Festplatte belegen und eine einfache Bereinigung ermöglichen. " nicht benötigter "Überschuss.

_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 Kommentare,

Es gibt auch _docker {container,image,volume,network} Prune_, mit dem nicht verwendete Instanzen des Objekttyps one entfernt werden können.

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

_docker container Prune
_
126
VonC

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

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

Und für Bilder :

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

Jede dieser Methoden führt jedoch dazu, dass docker rm oder docker rmi einen Fehler auslöst, wenn keine passenden Container vorhanden sind. Der ältere docker rm $(docker ps -aq)-Trick war sogar noch schlimmer, als er versuchte, einen laufenden Container zu entfernen, was bei jedem fehlschlug.

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

# 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 angegeben, wurde die ursprüngliche Antwort zum Entfernen von Bildern und nicht von Containern gegeben. Aktualisiert, um beide zu beantworten, einschließlich neuer Links zur Dokumentation. Vielen Dank an Adrian (und Ryans Antwort) für die Erwähnung der neuen ps -Filterung.

103
caktux

UPDATED2017 (NEWEST)

docker container Prune

Auf diese - 2017 (ALTE) Weise

Entfernen von ALLE BEHÄLTER ABGESCHLOSSEN

docker rm $(docker ps -a -q)

Entfernen von ALL CONTAINERS(STOPPED AND NON STOPPED)

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

Alle angehaltenen Behälter entfernen:

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

Aus dem Kommentar von pauk96 :

Seit Version 1.3.0 können Sie Filter mit docker ps anstelle von grep Exited verwenden docker ps -a -f status=exited. Und wenn Sie -q damit verwenden, können Sie Container-IDs nur anstelle der vollständigen Ausgabe erhalten, ohne dass awk dafür verwendet werden muss.

49
montells

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

Nehmen wir an, 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.

Container entfernen, die vor einem anderen Container erstellt wurden

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

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

Container entfernen, 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, zusätzliche Container richten keinen weiteren Schaden an, sondern belegen Speicherplatz.

33
vesako

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

docker system Prune

Wenn Sie sicherstellen möchten, dass Sie nur Container löschen, die den Status exited haben, verwenden Sie Folgendes:

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

Wenn Sie Docker-Inhalte bereinigen, können Sie auch Bilder ohne Tags und ohne Namen auf folgende Weise entfernen:

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

Hier ist mein docker-cleanup Skript, das nicht getaggte Container und Bilder entfernt. Bitte überprüfen Sie die Quelle auf Updates.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

Quelle: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup

22
blueyed

Stoppen Sie zunächst die Ausführung von Containern, bevor Sie versuchen, diese zu entfernen

Laufende Behälter entfernen

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 erneut auszuführen, anstatt jedes Mal eine neue zu erstellen, und versuche, sie ordnungsgemäß herunterzufahren.

Hinweis: Beim Versuch, einen Container anzuhalten, wird eine Fehlermeldung ausgegeben:

Fehler: Ein laufender Container kann nicht entfernt werden. Bitte stoppen Sie ihn zuerst

Entfernen Sie alle Behälter

docker rm $(docker ps -a -q)
13
Ulises

Entfernen aller Container aus der Windows Shell:

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

https://github.com/HardySimpson/docker-cleanup

Docker bereinigen

Eine winzige All-in-One-Shell, die Folgendes entfernt:

  • Container, die nicht länger als einen Tag zurückliegen
  • Bilder, die zu keinem verbleibenden Container gehören

Beabsichtigen, als Crontab-Job ausgeführt zu werden

Feature

  • Es werden alle <none>:<none> Bilder entfernt
  • Wenn auf das Bild mehrere repo: tag-Verweise verweisen, werden alle repo: tag-Verweise entfernt, außer wenn ein Container ausgeführt wird. Eigentlich ist es eine Natur von "Docker Rmi".
  • Auf dem Bildschirm werden viele Fehlermeldungen angezeigt, und Sie können entscheiden, ob Sie 2>/dev/null wählen möchten oder nicht
  • Lerne etwas von docker-gc und behebe das Problem (es kann kein Bild entfernen, das das mehrfache Repo: Tag hat)
9
HardySimpson

Verwenden:

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

Es stoppt mit Gewalt und entfernt alle lokal vorhandenen Container.

8
Shashank G

Alle angehaltenen Behälter entfernen.

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

Dadurch werden alle angehaltenen Container entfernt, indem eine Liste aller Container mit dem Docker ps -a -q abgerufen und ihre IDs an den Docker rm übergeben werden. Hierdurch sollten keine laufenden Container entfernt werden, und es wird Ihnen mitgeteilt, dass ein laufendes Image nicht entfernt werden kann.

Alle Bilder ohne Tags entfernen

Jetzt möchten Sie alte Bilder bereinigen, um Platz zu sparen.

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

7
Ric_Harvey

Daher empfehle ich persönlich, 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, das ich mit git tag verwende, und markiere das neueste Docker-Image immer mit "latest". Das bedeutet, dass meine Docker-Bilder ohne Bereinigung wie folgt aussehen:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

Jetzt möchte ich natürlich nicht, dass alle meine Bilder (oder Container) auf allen meinen Produktionsboxen unwiderruflich bleiben. Ich möchte nur die letzten 3 oder 4 für Rollbacks und alles andere loswerden. Unix's tail ist dein bester Freund hier. Da docker images und docker ps beide nach Datum sortiert sind, können wir nur tail verwenden, um alle bis auf die ersten drei auszuwählen und zu entfernen:

docker rmi $(docker images -q | tail -n +4)

Führen Sie dies zusammen mit Ihren Bereitstellungsskripten (oder lokal) aus, um immer nur genügend Images für ein komfortables Rollback zu haben, ohne zu viel Platz in Anspruch zu nehmen oder alte Images zu überladen.

Persönlich behalte ich immer nur einen Container in meiner Produktionsbox, aber Sie können dasselbe mit Containern tun, wenn Sie mehr wollen:

docker rm $(docker ps -aq | tail -n +4)

In meinem vereinfachten Beispiel haben wir es schließlich immer nur mit einem Repository zu tun. Wenn Sie jedoch mehr hatten, können Sie mit derselben Idee auch ein bisschen komplexer werden. Angenommen, ich möchte nur die letzten drei Bilder von some_repo/some_image behalten. Ich kann einfach grep und awk einmischen und bin auf dem Weg:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

Wieder gilt die gleiche Idee für Container, aber Sie haben sie zu diesem Zeitpunkt erhalten, sodass ich aufhören werde, Beispiele zu nennen.

7
Eli

Neuer Weg: spotify/docker-gc spielen den Streich.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • Container, die vor mehr als einer Stunde beendet wurden, werden entfernt.
  • Bilder, die danach zu keinem verbleibenden Container gehören, werden entfernt

Es wurden Umgebungseinstellungen unterstützt

Erzwingen des Löschens von Bildern mit mehreren Tags

 FORCE_IMAGE_REMOVAL=1

Löschen von Containern erzwingen

 FORCE_CONTAINER_REMOVAL=1 

Ausschließen kürzlich verlassener Container und Bilder aus der Garbage Collection

 GRACE_PERIOD_SECONDS=86400

Diese Einstellung verhindert auch das Entfernen von Bildern, die vor weniger als GRACE_PERIOD_SECONDS Sekunden erstellt wurden.

Trockenlauf

 DRY_RUN=1

Aufräumen von verwaisten Containervolumen CLEAN_UP_VOLUMES = 1

Referenz: docker-gc

Alte Vorgehensweise:

alte, nicht laufende Container löschen

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

löscht alle Bilder, die nicht laufenden Docker-Containern zugeordnet sind

 docker images -q | xargs --no-run-if-empty docker rmi

Bereinigen von verwaisten Docker-Volumes für Docker Version 1.10.x und höher

 docker volume ls -qf dangling=true | xargs -r docker volume rm

Basierend auf dem Zeitraum

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
6
f-society
  1. Entfernen Sie alle Docker-Prozesse:

    docker rm $(docker ps -a -q)
    
  2. Bestimmten Behälter entfernen:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    
6
padakpadak

Entferne 5 älteste Behälter:

docker rm `docker ps -aq | tail -n 5`

Sehen Sie, wie viele Container noch vorhanden sind:

docker ps -aq | wc -l
5
Pithikos

Sie können den folgenden Befehl verwenden, um die verlassenen Container zu entfernen:

docker rm $(Sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

Hier ist die vollständige Übersicht, um auch die alten Bilder im Docker zu entfernen: Übersicht, um alte Docker-Container und Bilder zu entfernen .

4
urodoz
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done
3
mckoss

Sie können nur angehaltene Container entfernen. Stoppen Sie alle von ihnen am Anfang

docker stop $(docker ps -a -q)

Dann können Sie entfernen

docker rm $(docker ps -a -q)

3
Marcin Szymczak

Ich verwende immer docker rmi $(docker ps -a -q), um alle Bilder zu entfernen.

Sie können das Verzeichnis /var/lib/docker/graph entfernen, wenn docker rmi fehlgeschlagen ist.

3
sunny

Probieren Sie diesen Befehl aus, um Container und baumelnde Bilder zu reinigen.

docker system Prune -f
3
Pal

Die grundlegenden Schritte zum Stoppen/Entfernen aller Container und Bilder

  1. Listen Sie alle Container auf

    docker ps -aq

  2. Stoppen Sie alle laufenden Container

    docker stop $(docker ps -aq)

  3. Entfernen Sie alle Behälter

    docker rm $(docker ps -aq)

  4. Entfernen Sie alle Bilder

    docker rmi $(docker images -q)

Hinweis: Zuerst müssen Sie alle laufenden Container anhalten, bevor Sie sie entfernen. Bevor Sie ein Bild entfernen, müssen Sie dessen abhängigen Container anhalten und entfernen.

3

Verwenden Sie die folgenden verschachtelten Befehle:

$ Sudo docker stop $(Sudo docker ps -a -q)

Dieser Befehl stoppt alle laufenden Container.

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

Dieser Befehl entfernt alle Container.

2
Rahul Bagad

Hier ist ein Skript zum Entfernen von aktiven und verlassenen Containern, die länger als 2 Tage erstellt wurden:

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
    echo " Created date of $p is $cont"
    k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))`
    echo $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done </scripts/containers.txt
2
SAB

Wenn Sie herausgenommene 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 meltwater/docker-cleanup herunterladen.

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 ein Schmerz).

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

Standardmäßig wird es alle 30 Minuten ausgeführt (oder wie lange Sie es mit der Option DELAY_TIME = 1800 festlegen) und bereinigen Sie vorhandene Container und Bilder.

Weitere Details: Docker-Bereinigung

2
Innocent Anigbo

So entfernen Sie ALLE Behälter ohne zu weinen:

Sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm -f
2
Felipe
docker rm --force `docker ps -qa`
2
Sivalingam

Entfernen Sie alle Container, die von einem bestimmten Image erstellt wurden:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
2
estani

Unter Ubuntu 14.04 (Trusty Tahr):

$ for CON in `docker ps -qa`; do docker rm $CON ; done

Dies ist nur ein normaler Bash-Befehl, daher sollte er mit JEDEM Bash-kompatiblen Terminal funktionieren.

2
sobi3ch

Für alle Interessierten nahm ich das Beispiel von qkrijger und verwandelte es in ein klares Alles (stoppen und alles entfernen)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
2
Kraig McConaghy
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi
1
AleX

Verwenden Sie das Docker-Verwaltungstool Portainer

Mit diesem Tool können wir alle alten Container verwalten, ohne Volumes und Images zu verwenden

Es ist eine einfache Verwaltungsoberfläche für Hafenarbeiter

WIE MAN PORTAINER EINSETZT

Verwenden Sie die folgenden Docker-Befehle, um Portainer bereitzustellen:

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Sie müssen lediglich über Ihren Browser auf den Port 9000 der Docker-Engine zugreifen, auf der Portainer ausgeführt wird.

Hinweis: Die Option -v /var/run/docker.sock:/var/run/docker.sock kann nur in Linux-Umgebungen verwendet werden.

1
Anish Varghese

Ich fand den folgenden Befehl sehr praktisch, um alle Container anzuhalten und zu entfernen. Sie müssen nicht explizit mit einem anderen Befehl stoppen, wenn Sie das Flag -f (force) verwenden, da alle laufenden Container gestoppt werden:

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

Das Entfernen älterer Docker-Container ist sehr einfach.

Alle Container auflisten:

docker ps -a
docker ps (To list the running containers)

Sobald Sie docker ps -a drücken, erhalten Sie eine Liste der Container zusammen mit der Container-ID (die eindeutig ist und eine Kombination aus a-z, A-Z und 0-9 darstellt). Kopieren Sie die Container-ID, die Sie entfernen möchten, und drücken Sie einfach die nachstehende Taste.

docker rm container_id

Ihr Container wird zusammen mit den in /var/lib/docker/aufs erstellten Ebenen entfernt (wenn Sie Ubuntu verwenden).

1
Harshal Vaidya

So löschen Sie einen angegebenen Container

docker container rm container_id

Wenn der Container ausgeführt wird, müssen Sie ihn stoppen, bevor Sie ihn löschen können

docker container stop container_id

Mit diesem Befehl werden alle vorhandenen Container gelöscht

docker container rm $(docker container -a -q)
1
NguyenHuuGiap

Dieser Vorgang umfasst zwei Schritte (Anhalten und Entfernen):

  1. Stoppen Sie den Container, der von laufenden Microservices verwendet wird

    docker stop $(docker ps -a -q)
    
  2. Entfernen Sie alle Behälter

    docker rm $(docker ps -a -q)
    
  3. Einzelbehälter entfernen

    docker rm container-ID
    
1

Hier ist ein Einzeiler, der alle ausgetretenen Behälter entfernt.

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

Wenn Sie ALLE Bilder entfernen möchten, können Sie so etwas verwenden.

docker rmi $(docker images | sed -n '1!p' | awk '{print $3}')

1
nPcomp

Diese beiden Bash-Zeilen filtern Container nach einigen Schlüsselwörtern, bevor sie gelöscht werden:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete

Von dieser Beitrag .

0
Emil Salageanu

Sie können Docker-Helper aus dem Repository verwenden https://github.com/kartoza/docker-helpers . Geben Sie nach der Installation einfach drmc ein.

0
etrimaille

Nach meiner Erfahrung sollten Sie Container anhalten, bevor Sie sie entfernen, um Fehler wie "Dieser Container wird noch ausgeführt" zu vermeiden.

Sudo /usr/bin/docker ps -aq |  awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'Sudo docker stop [email protected]; Sudo docker rm [email protected]' bash

Ich behalte einen Alias ​​in meinen Punktedateien wie:

alias wipedocker="Sudo /usr/bin/docker ps -aq |  awk '{print $1}' \
| xargs --no-run-if-empty bash -c 'Sudo docker stop [email protected]; Sudo docker rm [email protected]' bash"
0
CESCO

Um einfach alles zu entfernen, was derzeit nicht von einem laufenden Container verwendet wird, hilft folgendes Alias, das ich normalerweise in den .bash_profile auf meinem Mac geschrieben habe:

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

Immer wenn dockerclean über die Befehlszeile aufgerufen wird, werden angehaltene Container sowie nicht verwendete Bildebenen entfernt. Beim Ausführen von Containern und verwendeten Bildern wird eine Warnmeldung gedruckt und übersprungen.

0
h3nrik

Alle Container auflisten (nur IDs)

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)
0
Vikram Biwal

Stellen Sie für eine Linux-Installation sicher, dass Sie Sudo verwenden. Es ist auch gut, nach Bildern zu suchen, die Monate und Wochen alt sind:

Sudo docker ps -a | grep 'weeks ago\|months ago' | \
    awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm
0
Paul Oliver

Ich benutze:

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

verlassene Container löschen und:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

um alle untagged Bilder loszuwerden.

0

Ich verwende Variationen der folgenden:

docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1

Der erste Teil listet alle Prozesse auf.

Die zweite Option wählt nur die aus, für die 'cassandra' gefolgt von 'Exited' angegeben ist.

Die dritte Option entfernt alle Tests nach der Image-ID, sodass Sie eine Liste der Image-IDs erhalten.

Damit,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
0
JRun

Dieses kurze Skript könnte helfen (zusammengestellt aus früheren Antworten)!

#!/bin/bash

# Remove dangling images

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

if [ -n "$IMAGE_IDS" ]; then

    Sudo docker rmi $IMAGE_IDS > /dev/null 2>&1
    echo 'Images removed' $IMAGE_IDS
fi


# Remove exited containers

CONTAINER_IDS=$(Sudo docker ps -a -q -f status=exited)

if [ -n "$CONTAINER_IDS" ]; then

    Sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1
    echo 'Containers remove $CONTAINER_IDS'
fi
0
Chetan Sharma

docker rm -f $(docker ps -a -q) erledigt den Trick. Es stoppt die Behälter und entfernt sie auch.

0
Jagatveer Singh

Ich verwende die folgenden Befehle, um Exited und Restarting Docker-Container zu löschen

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

Verwenden Sie den folgenden Befehl, um Bilder mit dem Namen none zu entfernen

docker image rm --force $(docker image ls  |grep none |awk '{print $3}')
0
Sijo M Cyril