Ich habe Docker auf folgende Weise auf einem Debian 7-Computer installiert
$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
Danach, als ich zum ersten Mal versuchte, ein Image zu erstellen, schlug es mit dem folgenden Fehler fehl
time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"
Hier ist die Docker-Info
Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
Total Memory: 15.7 GiB
WARNING: No memory limit support
WARNING: No swap limit support
Wie kann ich den Speicher erhöhen? Wo sind die Systemkonfigurationen gespeichert?
Aus Kals Vorschlägen:
Als ich alle Bilder und Container loswurde, wurde Speicherplatz frei und der Image-Build lief länger, bevor er mit demselben Fehler fehlschlug. Die Frage ist also, auf welchen Bereich sich dies bezieht und wie ich ihn konfiguriere.
df -ih
Antworten:
Ich hatte den gleichen Fehler und löste ihn folgendermaßen:
1. Löschen Sie die verwaisten Volumes in Docker. Sie können den integrierten Docker-Volume-Befehl verwenden. Der integrierte Befehl löscht auch alle Verzeichnisse in / var / lib / docker / volume, die kein Volume sind. Stellen Sie daher sicher, dass Sie dort nichts gespeichert haben, was Sie speichern möchten.
Warnung Seien Sie dabei sehr vorsichtig, wenn Sie Daten haben, die Sie behalten möchten
Aufräumen:
Zusätzliche Befehle:
Liste baumelnder Bände:
Alle Bände auflisten:
2. Entfernen Sie auch alle nicht verwendeten Bilder.
Entfernen Sie zuerst die
<none>
Bilder (diese werden manchmal beim Erstellen eines Bildes generiert, und wenn das Erstellen des Bildes aus irgendeinem Grund unterbrochen wurde, bleiben sie dort).Hier ist ein schönes Skript, mit dem ich sie entferne
Wenn Sie dann Docker Compose verwenden, um Bilder für jedes Projekt lokal zu erstellen. Sie werden am Ende viele Bilder haben, die normalerweise wie Ihr Ordner benannt sind (wenn Ihr Projektordner beispielsweise Hallo heißt, finden Sie den Namen der Bilder
Hello_blablabla
). Ziehen Sie daher auch in Betracht, alle diese Bilder zu entfernenSie können das obige Skript bearbeiten, um sie zu entfernen, oder sie manuell mit entfernen
docker rmi {image-name}
quelle
docker images -qf dangling=true
und natürlich mit entfernendocker rmi $(docker images -qf dangling=true)
.UPDATE
Die folgenden Befehle wurden zu Hacks, da Docker weiterentwickelt wurde. Die derzeitige Best Practice ist
Dadurch wird Folgendes entfernt:
Wie unten ist dies nuklear.
Um Ihr System zu reinigen, entfernen Sie zuerst die Behälter
Entfernen Sie dann die Bilder
Dies ist natürlich nuklear und entfernt alle Container und alle Bilder. Sie können sie einzeln über
docker rm #CONTAINER_ID#
und entfernendocker rmi #IMAGE_ID
.quelle
df -ih
. Um eine chirurgischere Diagnose zu stellen, geben Siencdu
c ein, um die Anzahl der Dateien zu bestimmen, und C, um nach der Anzahl der Dateien zu sortieren, um eine grobe Schätzung der Verwendung all Ihrer Inodes zu erhalten. Wenn das Problem tatsächlich ein Docker ist, wird es von den Verzeichnissen mit den meisten Inodes sofort ersichtlich.docker system prune
Stellen Sie sicher, dass auf / var freier Speicherplatz vorhanden ist, da Docker hier standardmäßig die Bilddateien speichert (in / var / lib / docker).
Räumen Sie zuerst auf, indem Sie
docker ps -a
alle Container (einschließlich der gestoppten) auflisten unddocker rm
entfernen. Verwendendocker images
Sie dann, um alle gespeicherten Bilder aufzulisten unddocker rmi
zu entfernen.Ändern Sie als Nächstes den Speicherort mit der Option -g auf dem Docker-Daemon oder
/etc/default/docker
indem Sie die-g
Option bearbeiten und hinzufügenDOCKER_OPTS
.-g
Gibt den Speicherort der "Docker-Laufzeit" an. Dies ist im Grunde alles, was Docker beim Erstellen von Images und Ausführen von Containern erstellt. Wählen Sie einen Speicherort mit viel Speicherplatz, da der verwendete Speicherplatz mit der Zeit tendenziell wächst. Wenn Sie bearbeiten/etc/default/docker
, müssen Sie den Docker-Daemon neu starten, damit die Änderung wirksam wird.Jetzt sollten Sie in der Lage sein, ein neues Image zu erstellen (oder eines von Docker Hub abzurufen), und Sie sollten eine Reihe von Dateien sehen, die in dem Verzeichnis erstellt werden, das Sie mit der Option -g angegeben haben.
quelle
docker ps -a
diese Option, um alle Container (einschließlich der verlassenen) aufzulisten und anschließenddocker rm
zu entfernen. Verwenden Siedocker images
diese Option, um alle Bilder aufzulisten und anschließenddocker rmi
zu entfernen. Hoffentlich sollte das alles (oder die meisten Dinge) aufräumen.Wie bereits erwähnt,
hilft, aber mit Docker 17.06.1 und höher, ohne nicht verwendete Volumes zu bereinigen. Seit Docker 17.06.1 werden mit dem folgenden Befehl auch Volumes beschnitten:
Aus der Docker-Dokumentation: https://docs.docker.com/config/pruning/
Wenn Sie Volumes beschneiden und Bilder und Container behalten möchten:
quelle
docker volume prune
hat mir heute geholfen, als alle anderen Lösungen hier nicht mehr funktionierten.Wenn es sich nur um eine Testinstallation von Docker handelt (dh nicht um eine Produktion) und Sie sich nicht für eine nukleare Reinigung interessieren, können Sie:
Reinigen Sie alle Behälter:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
Alle Bilder reinigen:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
Auch dies verwende ich in meinen ec2-Instanzen bei der Entwicklung von Docker, nicht in ernsthaften QS- oder Produktionspfaden. Das Tolle ist, wenn Sie Ihre Docker-Datei (en) haben, ist es einfach, sie neu zu erstellen und / oder
docker pull
.quelle
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. Die OS X BSD-Version vonxargs
unterstützt diese-L
Option im Gegensatz zur boot2docker-Version.docker ps -a -q
usw. verwenden, um die Textmanipulationen zu vermeiden, dhdocker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
sollten den Trick tunum alle nicht verwendeten Container, Volumes, Netzwerke und Images gleichzeitig zu entfernen ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
Wenn es nicht ausreicht, kann man zuerst laufende Container entfernen:
Das Erhöhen von / var / lib / docker oder die Verwendung eines anderen Speicherorts mit mehr Speicherplatz ist ebenfalls eine gute Alternative, um diesen Fehler zu beheben (siehe Ändern des Installationsverzeichnisses für das Docker-Image? ).
quelle
docker system prune
entfernt keine Volumes.docker system prune -a -f --volumes
entfernt Volumes.Docker für Mac
Also
docker system prune
unddocker system prune --volumes
in anderen Antworten vorgeschlagen, machte jedes Mal etwas Platz frei, aber schließlich bekam ich jedes Mal, wenn ich etwas ausführte, den Fehler.Das eigentliche Problem wurde behoben,
Docker.raw
indem die Datei, die Docker für Mac für die Speicherung verwendet, gelöscht und neu gestartet wurde.Um diese Datei zu finden, öffnen Sie Docker für Mac und gehen Sie zu *
In neueren Versionen von Docker für Mac ** werden die tatsächliche Größe dieser Datei auf der Festplatte direkt in der Benutzeroberfläche sowie die maximal zugewiesene Größe angezeigt. Sie werden wahrscheinlich sehen, dass es massiv ist. Zum Beispiel auf meinem Computer waren es 41 GB !
Ich habe
Docker.raw
Docker für Mac gelöscht , neu gestartet und die Datei wurde automatisch neu erstellt und hatte wieder 0 GB .Alles funktionierte weiter wie zuvor , obwohl ich natürlich meinen Docker-Cache verloren hatte. Wie erwartet füllte sich die Datei nach dem Ausführen einiger Docker-Befehle wieder mit ein paar GB, aber bei weitem nicht mit 41 GB .
Aktualisieren
Ein paar Monate später
Docker.raw
füllte ich mich wieder auf eine ähnliche Größe. Diese Methode hat also funktioniert, muss aber alle paar Monate wiederholt werden. Für mich ist das in Ordnung.Ein Hinweis, warum dies funktioniert - ich muss davon ausgehen, dass es sich um einen Fehler in Docker für Mac handelt. Es scheint wirklich so, als ob
docker system prune
/docker system prune --volumes
sollte der Inhalt dieser Datei vollständig gelöscht werden, aber es scheint, dass die Datei andere Inhalte ansammelt, die mit diesen Befehlen nicht gelöscht werden können. Das manuelle Löschen löst das Problem!quelle
Docker hinterlässt baumelnde Bilder, die Ihren Platz beanspruchen können. Führen Sie die folgenden Schritte aus, um nach Docker zu bereinigen:
oder mit älteren Versionen von Docker:
Dadurch werden verlassene und baumelnde Bilder entfernt, wodurch hoffentlich Speicherplatz auf dem Gerät frei wird.
quelle
docker rmi $(docker images -f "dangling=true" -q)
quelle
Sie können auch verwenden:
oder nur für Bände:
quelle
In meinem Fall hat die Installation von Ubuntu-Server 18.04.1 [aus irgendeinem seltsamen Grund] ein logisches LVM-Volume mit nur 4 GB Größe anstelle von 750 GB erstellt. Daher würde beim Abrufen von Bildern der Fehler "Kein Speicherplatz mehr auf dem Gerät" angezeigt. Das Update ist einfach:
quelle
Ich bin auch auf dieses Problem bei RHEL-Computern gestoßen. Ich habe nirgendwo eine passende Lösung für die Stack-Overflow- und Docker-Hub-Community gefunden. Wenn Sie dieses Problem auch nach dem folgenden Befehl haben:
Docker-System beschneiden - alle
Die Lösung, die endlich funktioniert hat:
quelle
Reinigen Sie Docker mit dem folgenden Befehl:
quelle
Ihre Gruppen haben die
cpuset
Controller aktiviert. Dieser Controller ist vor allem in NUMA-Umgebungen nützlich, in denen genau festgelegt werden kann, welche CPU / Speicherbank Ihre Aufgaben ausführen dürfen.Standardmäßig sind die obligatorischen
cpuset.mems
undcpuset.cpus
nicht festgelegt, was bedeutet, dass für Ihre Aufgabe "kein Platz mehr vorhanden ist", daher der Fehler.Der einfachste Weg, dies zu beheben, besteht darin
cgroup.clone_children
, 1 in der Stammgruppe zu aktivieren. In Ihrem Fall sollte es seinGrundsätzlich wird das System angewiesen, Container
cpuset.mems
undcpuset.cpus
deren übergeordnete cgroup automatisch zu initialisieren .quelle
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Wenn Sie das boot2docker-Image über das Docker Toolkit verwenden, ist das Problem darauf zurückzuführen, dass der virtuellen boot2docker-Maschine nicht genügend Speicherplatz zur Verfügung steht.
Wenn Sie ein
docker import
Bild erstellen oder ein neues hinzufügen, wird das Bild in das Bild kopiert,/mnt/sda1
das möglicherweise voll geworden ist.Eine Möglichkeit zu überprüfen, welcher Speicherplatz im Image verfügbar ist, besteht darin, in die VM zu ssh
df -h
und den verbleibenden Speicherplatz in / mnt / sda1 auszuführen und zu überprüfenDer Befehl ssh lautet
docker-machine ssh default
Sobald Sie sicher sind, dass es sich tatsächlich um ein Speicherplatzproblem handelt, können Sie entweder gemäß den Anweisungen in einigen Antworten auf diese Frage bereinigen oder die Größe des boot2docker-Images selbst ändern, indem Sie den Speicherplatz vergrößern
/mnt/sda1
Sie können den Anweisungen hier folgen, um die Größe des Bildes https://gist.github.com/joost/a7cfa7b741d9d39c1307 zu ändern
quelle
Wenn Sie Docker Desktop verwenden, können Sie die Größe des Festplattenabbilds in den erweiterten Einstellungen erhöhen, indem Sie die Docker- Einstellungen aufrufen .
Hier ist der Screenshot von macOS:
quelle
Dies kann an dem Standardspeicherplatz von 40 GB liegen (Standardpfad / var / lib / docker).
Sie können das Speichervolumen so ändern, dass es auf einen anderen Pfad verweist
DOCKER_STORAGE_OPTIONS = '- Speichertreiber = Overlay --graph = CUSTOM_PATH'
Wenn Sie Befehls-Docker-Informationen ausführen (der Speichertreiber sollte als Overlay angezeigt werden).
quelle
Es scheint, dass es einige Möglichkeiten gibt, wie dies geschehen kann. Das Problem, das ich hatte, war, dass das Docker-Disk-Image seine maximale Größe erreicht hatte (Docker Whale -> Einstellungen -> Disk, wenn Sie die Größe in OSX anzeigen möchten).
Ich erhöhte das Limit und war gut zu gehen. Ich bin sicher, dass das Aufräumen nicht verwendeter Bilder auch funktionieren würde.
quelle
Ich führe die folgenden Befehle aus.
Es ist nicht erforderlich, Bilder anschließend neu zu erstellen.
Diese entfernen austretende / baumelnde Behälter und baumelnde Volumina.
quelle
Für mich
docker system prune
hat der Trick getan. Ich verwende Mac OS.quelle
docker volume ls
gab nichts zurück, daher schien es, als würde der Speicher hauptsächlich von Caches und baumelnden Bildern verwendet.Das hat bei mir funktioniert
scheint mit der neuesten Version eine bessere Option zu sein
quelle