Ich habe Docker durch eine Containerüberladung zum Absturz gebracht. Wie entferne ich sie?

Ich habe Docker durch eine Containerüberladung zum Absturz gebracht. Wie entferne ich sie?

Meine Geschichte

Es war einmal, da rief ichDockeraus einer PHP-Laravel-Warteschlange, um Tausende von Mediendateien zu verarbeiten. Mein Code erstellte für jede Aufgabe, die ich erledigen wollte (z. B. „verarbeiten“, „suchen“, „schneiden“ usw.), einen neuen Container. Dann ging ich ins Bett und das Unglück schlug zu. Ich wachte mit einer 1 TB großen Protokolldatei und einigen hunderttausend Containern in verschiedenen Zuständen auf.

Docker funktioniert nicht mehr. Das heißt, wenn ich etwas tippe docker version(oder docker anythingwas auch immer), sitzt es einfach da und starrt. Ich kann die Container nicht über den Standard entfernen, docker rm $(docker ps -a -q)weil Docker sehr, sehr deprimiert geworden ist.

Hier sind relevante Informationen dazu, wie ich den Daemon derzeit aufrufe:

$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"

(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)

Meine Fragen

  1. Wie kann ich Docker-Container entfernen, wenn der Docker-Daemon nicht reagiert?

  2. Ich verwende Docker als glorifizierte ausführbare Datei, die über die API aus dem Code aufgerufen wird. Welche zusätzlichen Schritte muss ich unternehmen, um meinen Code in Zukunft zu bereinigen?

Antwort1

Nun, ich habe ein bisschen nachgeforscht.

Wie kann ich Docker-Container entfernen, wenn der Docker-Daemon nicht reagiert?

In Ubuntu werden Container im /var/lib/docker/containersVerzeichnis gespeichert. Löschen Sie den Inhalt dieses Verzeichnisses und schon ist alles viel besser.

Und falls es jemanden interessiert: Es mussten rund 250.000 Container entfernt werden. Angesichts der Anzahl der Dateien, die ich entfernen musste,ls /var/lib/docker/containers | xargs -n200 rm -rf

Ich verwende Docker als glorifizierte ausführbare Datei, die über die API aus dem Code aufgerufen wird. Welche zusätzlichen Schritte muss ich unternehmen, um meinen Code in Zukunft zu bereinigen?

Wenn der Container nicht wieder verwendet wird, sollten Sie ihn offiziell „entfernen“, wenn Sie fertig sind. In der Befehlszeile würde dies mithilfe von erfolgen docker rm $(containername)und im Code hängt es vollständig davon ab, wie auf Docker zugegriffen wird.

verwandte Informationen