Sollte ich mir Sorgen über überschüssige, nicht laufende Docker-Container machen?


142

Jeder docker runBefehl oder jeder RUNBefehl in einer Docker-Datei erstellt einen Container. Wenn der Container nicht mehr läuft, ist er immer noch mit zu sehen docker ps -a.

Sollte ich mir Sorgen machen, eine riesige Liste nicht laufender Container zu haben? Sollte ich docker rmauf nicht laufenden Containern ausstellen ?

Ich bin mir nicht sicher, welche Leistungs- oder Speicher- / Speichereinbußen diese nicht laufenden Container verursachen.


1
Ein docker execBefehl wurde vor einiger Zeit hinzugefügt, siehe docs.docker.com/reference/commandline/cli/#exec - er führt einen Befehl von einem laufenden Container aus.
schmunk

Zu Ihrer Information, wenn Sie sehen möchten, wie alte Container entfernt werden, lesen
Ryan Walls

1
@schmunk Der Link wurde verschoben. docs.docker.com/engine/reference/commandline/exec
akauppi

Antworten:


72

Die Container, die nicht ausgeführt werden, belegen außer dem Speicherplatz keine Systemressourcen.

Es ist normalerweise gut, nach sich selbst aufzuräumen, aber wenn viele von ihnen herum sitzen, sollte dies die Leistung überhaupt nicht verlangsamen.

Wenn Sie beim Ausführen von Docker-Befehlen mit vielen gestoppten Containern eine Verlangsamung feststellen, liegt möglicherweise ein Fehler im Docker vor, und Sie sollten einen Fehler einreichen.


1
Die Dokumente für den RUNBefehl wurden jetzt verschoben zu: docs.docker.io/en/latest/reference/builder/#run
aculich

63

In der docker runDokumentation wird beschrieben, wie Sie den Container automatisch bereinigen und das Dateisystem entfernen, wenn der Container beendet wird:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Das Obige zeigt, dass Container standardmäßig nicht entfernt werden, aber das Hinzufügen --rm=trueoder nur die Kurzschrift --rmwie folgt funktioniert:

sudo docker run -i -t --rm ubuntu /bin/bash

Wenn Sie den Container verlassen, wird er automatisch entfernt.

Sie können dies testen, indem Sie Ihre Docker-Container in einem Terminalfenster auflisten:

watch -n1 'sudo ls -c /var/lib/docker/containers'

Führen Sie dann in einem anderen Fenster diesen Befehl aus, um mehrere Docker-Container auszuführen, die alle automatisch beendet werden, nachdem Sie bis zu 10 Sekunden lang geschlafen haben.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

4
Keine direkte Antwort auf die Frage , aber eine interessante Antwort, die den Benutzern einen Einblick in die Mechanismen hinter Docker gibt. Vielen Dank!
ThaJeztah

3
-rmist veraltet und wird irgendwann entfernt, verwenden Sie --rmstattdessen.
Bain

5

Wenn Sie einen Container mit einem Volume ausführen und Docker rm -v nicht zum Entfernen verwenden, wird das Volume nach dem Entfernen eines Containers nicht entfernt. Es gibt auch ein Problem mit einem vfs-Speichertreiber. Wenn Sie vergessen zu bereinigen, verbrauchen Volumes Ihren Speicherplatz.


2

Ich bin mir nicht sicher, welche Leistungs- oder Speicher- / Speichereinbußen diese nicht laufenden Container verursachen.

Um festzustellen, wie viel Speicher nicht laufende Docker-Container verwenden, können Sie Folgendes ausführen:

docker ps --size --filter "status=exited"

Gleichermaßen könnten Sie laufen:docker container ls --filter "status=exited"

Sie können auch den Befehl docker system df(eingeführt in Docker 1.13.0, Januar 2017) verwenden, um die Verwendung der Docker-Festplatte anzuzeigen, z.

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
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.