it-swarm.com.de

Andockfehler: Auf dem Gerät ist kein Platz mehr

Ich habe das Docker auf folgende Weise auf einem Debian 7-Rechner 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

Beim ersten Versuch, ein Image zu erstellen, schlug der folgende 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 werden die Systemkonfigurationen gespeichert?

Aus Kals Vorschlägen:

Nachdem ich alle Bilder und Container entfernt hatte, gab es etwas Speicherplatz frei und der Image-Build wurde länger ausgeführt, bevor derselbe Fehler auftrat. Die Frage ist also, auf welchen Raum sich das bezieht und wie konfiguriere ich es?

192
user_mda

Ich hatte den gleichen Fehler und löste es so:

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/Volumes, die kein Volume sind. Stellen Sie also sicher, dass Sie nichts dort eingefügt haben, das Sie speichern möchten.

Seien Sie vorsichtig, wenn Sie Daten haben, die Sie behalten möchten

Aufräumen:

$ docker volume rm $(docker volume ls -qf dangling=true)

Zusätzliche Befehle:

Liste baumelnder Volumina:

$ docker volume ls -qf dangling=true

Alle Volumes auflisten:

$ docker volume ls

2 Entfernen Sie auch alle nicht verwendeten Bilder.

Beseitigen Sie zuerst die <none>-Bilder (diese werden manchmal beim Erstellen eines Images generiert und wenn das Image-Gebäude aus irgendeinem Grund unterbrochen wurde, bleiben sie dort).

hier ist ein schönes Skript, mit dem ich sie entferne 

docker rmi $(docker images | grep '^<none>' | awk '{print $3}')

Wenn Sie dann Docker Compose verwenden, um Images lokal für jedes Projekt zu erstellen. Sie erhalten am Ende eine Menge Bilder, die normalerweise wie Ihr Ordner bezeichnet werden (Beispiel: Wenn Ihr Projektordner Hallo lautet, finden Sie den Namen Hello_blablabla der Bilder). Entfernen Sie also alle diese Bilder

sie können das obige Skript bearbeiten, um sie zu entfernen oder manuell mit 

docker rmi {image-name}

229
Mahmoud Zalt

UPDATE
Die folgenden Befehle wurden zu Hacks, während Docker weiter entwickelt wird. Die derzeit beste Praxis ist

docker system Prune

Dies wird entfernen:

- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images

Wie unten ist dies nuklear. 


Entfernen Sie zum Reinigen des Systems zuerst die Behälter

$ docker rm $(docker ps -aq)

dann entfernen sie bilder

$ docker rmi $(docker images -q)

Dies ist natürlich nuklear und entfernt alle Container und alle Bilder. Sie können sie einzeln über docker rm #CONTAINER_ID# und docker rmi #IMAGE_ID entfernen. 

163
Joshua Cook

Stellen Sie sicher, dass Sie über/var freien Speicherplatz haben, da Docker die Bilddateien standardmäßig speichert (in/var/lib/docker).

Bereinigen Sie zunächst die Inhalte, indem Sie docker ps -a verwenden, um alle Container (einschließlich der angehaltenen) aufzulisten, und docker rm, um sie zu entfernen. Verwenden Sie dann docker images, um alle von Ihnen gespeicherten Bilder aufzulisten, und docker rmi, um sie zu entfernen.

Ändern Sie anschließend den Speicherort mit der Option -g auf dem Docker-Dämon oder bearbeiten Sie /etc/default/docker und fügen Sie die Option -g zu DOCKER_OPTS hinzu. -g gibt den Speicherort der "Docker-Laufzeit" an. Dies ist im Wesentlichen alles, was Docker beim Erstellen von Images und beim Ausführen von Containern erstellt. Wählen Sie einen Ort mit viel Speicherplatz aus, da der belegte Speicherplatz im Laufe der Zeit tendenziell wächst. Wenn Sie /etc/default/docker bearbeiten, 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 in dem Verzeichnis sehen, das Sie mit der Option -g angegeben haben.

64
Kal

Wenn es sich nur um eine Testinstallation von Docker handelt (dh nicht für die Produktion) und Sie keine nukleare Reinigung durchführen möchten, können Sie:

reinigen Sie alle Behälter: docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm

reinigen Sie alle Bilder: docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f

Ich verwende dies auch in meinen ec2-Instanzen bei der Entwicklung von Docker, nicht in einem ernsthaften QS- oder Produktionspfad. Das Tolle ist, dass wenn Sie Ihre Dockerfile (s) haben, es einfach ist, und docker pull neu zu erstellen.

27
James

Docker lässt baumelnde Bilder herum, die Ihren Platz einnehmen können. Um nach dem Docker aufzuräumen, führen Sie Folgendes aus

docker image Prune [-af if you want to force remove all images]

oder mit älteren Versionen von Docker:

docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")

Dadurch werden vorhandene und baumelnde Bilder entfernt, wodurch der Platz auf dem Gerät hoffentlich gelöscht wird.

11
punkrockpolly

Reinigen Sie den Docker mit dem folgenden Befehl:

docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi
6
Ashok Waghmare

In Ihren Gruppen ist der Controller cpuset aktiviert. Dieser Controller ist vor allem in einer NUMA-Umgebung nützlich, in der Sie genau festlegen können, welche CPU-/Speicherbank Ihre Aufgaben ausführen dürfen.

Standardmäßig sind die obligatorischen Codes cpuset.mems und cpuset.cpus nicht festgelegt. Dies bedeutet, dass für Ihre Aufgabe kein Platz mehr vorhanden ist.

Der einfachste Weg, dies zu beheben, besteht darin, cgroup.clone_children in der Root-Gruppengruppe auf 1 zu setzen. In Ihrem Fall sollte es sein 

echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children

Im Wesentlichen wird das System angewiesen, den cpuset.mems und cpuset.cpus des Containers von ihrer übergeordneten Gruppe automatisch zu initialisieren.

5
yadutaf
  1. Reinigen Sie baumlose Bilder docker rmi $(docker images -f "dangling=true" -q)
  2. Entfernen Sie unerwünschte Volumes
  3. Entfernen Sie nicht verwendete Bilder
  4. Nicht verwendete Behälter entfernen
5
josepainumkal

sie können auch verwenden:

docker system Prune

oder nur für Bände:

docker volume Prune
5
alexanoid

so entfernen Sie alle nicht verwendeten Container, Volumes, Netzwerke und Images gleichzeitig ( https://docs.docker.com/engine/reference/commandline/system_Prune/#related-commands ):

docker system Prune -a -f

wenn es nicht genug ist, kann man zuerst laufende Container entfernen:

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

das Erhöhen von/var/lib/docker oder die Verwendung eines anderen Speicherorts mit mehr Speicherplatz ist auch eine gute Alternative, um diesen Fehler zu beseitigen (siehe Wie man das Docker-Image-Installationsverzeichnis ändert? )

5
Guillaume

Wie bereits erwähnt,

docker system Prune

hilft, aber mit Docker 17.06.1 und höher, ohne ungenutzte Volumes zu beschneiden. Seit Docker 17.06.1 werden mit dem folgenden Befehl auch Volumes gelöscht:

docker system Prune --volumes

In der Docker-Dokumentation: https://docs.docker.com/config/pruning/

Der Docker-Befehl "Löschen" ist eine Verknüpfung zum Löschen von Bildern, Containern und Netzwerken. In Docker 17.06.0 und früheren Versionen werden Volumes ebenfalls beschnitten. In Docker 17.06.1 und höher müssen Sie das Flag --volumes für das Docker-System "Bereinigen auf Bereinigen von Volumes" angeben.

Wenn Sie Volumes bereinigen und Bilder und Container behalten möchten:

docker volume Prune
3
RoBeaToZ

Ich habe dieses Problem auch auf einem RHEL-Computer festgestellt. 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 Prune --all

Die Lösung, die endlich funktionierte:

  1. docker-Info
    • So überprüfen Sie den aktuellen Docker-Speichertreiber
    • Meins war: Speichertreiber: devicemapper; Wenn Sie den Speichertreiber als Overlay2 haben, brauchen Sie sich keine Sorgen zu machen. Lösung wird immer noch für Sie arbeiten.
  2. df -h
    • Hiermit überprüfen Sie die verfügbaren Dateisysteme auf dem Computer und den Pfad, in dem sie bereitgestellt werden. Zwei montierte Pfade, um eine Notiz zu haben:
    • / dev/mapper/rootvg-var 7.6G 1.2G 6.1G 16%/var
    • / dev/mapper/rootvg-apps 60G 9.2G 48G 17%/apps
    • Hinweis - Standardmäßig lautet der Docker-Speicherpfad/var/lib/docker. Es hat verfügbaren Speicherplatz ~ 6 GB und damit alle platzbezogenen Probleme. Im Grunde muss ich den Standardspeicher auf einen anderen Speicher verschieben, in dem mehr Speicherplatz verfügbar ist. Für mich ist sein Dateisystempfad '/ dev/mapper/rootvg-apps', der auf/apps gemountet ist. Die Aufgabe besteht nun darin,/var/lib/docker nach etwas wie/apps/newdocker/docker zu verschieben.
  3. mkdir/apps/newdocker/docker
  4. chmod -R 777/apps/newdocker/docker
  5. Aktualisieren Sie die Datei docker.serive unter Linux unter: /usr/lib/systemd/system
    • vi /usr/lib/systemd/system/docker.service
  6. wenn es sich bei dem Speichergerät um einen Devicemapper handelt, kommentieren Sie die vorhandene ExecStart-Zeile und fügen Sie sie unter [Service] hinzu:
    • ExecStart =
    • ExecStart = /usr/bin/dockerd -s devicemapper --storage-opt dm.fs = xfs --storage-opt dm.basesize = 40 GB -g/apps/newdocker/docker --exec-opt native.cgroupdriver = cgroupfs
  7. Oder wenn das Speichergerät Overlay2 ist:
    • fügen Sie einfach -g/apps/newdocker/docker in die vorhandene ExexStart-Anweisung ein.
    • So etwas wie ExecStart =/usr/bin/dockerd -g/apps/newdocker/docker -H fd: // --containerd =/run/containerd/containerd.sock
  8. rm -rf/var/lib/docker (löscht alle vorhandenen Dockerdaten)
  9. systemctl stop docker
  10. ps aux | grep -i docker | grep -v grep
    • Wenn mit dem obigen Befehl keine Ausgabe erstellt wurde, laden Sie den systemd-Daemon mit dem folgenden Befehl neu.
  11. systemctl daemon-reload
  12. systemctl Docker starten
  13. docker-Info
    • Überprüfen Sie den verfügbaren Datenbereich: 62,15 GB, nachdem Sie das Dock auf ein neues Dateisystem umgestellt haben.
  14. ERLEDIGT
2

Wenn Sie das boot2docker-Image über Docker Toolkit verwenden, ist das Problem darauf zurückzuführen, dass auf der virtuellen boot2docker-Maschine nicht mehr genügend Speicherplatz vorhanden ist.

Wenn Sie einen docker import - Befehl ausführen oder ein neues Bild hinzufügen, wird das Bild in den /mnt/sda1 - Befehl kopiert, der möglicherweise voll ist.

Eine Möglichkeit, zu überprüfen, welcher Speicherplatz im Image verfügbar ist, besteht darin, in vm zu ssh zu wechseln, df -h Auszuführen und den verbleibenden Speicherplatz in/mnt/sda1 zu überprüfen

Der Befehl ssh lautet docker-machine ssh default

Wenn 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 aufräumen oder die Größe des boot2docker-Images selbst ändern, indem Sie den Speicherplatz auf /mnt/sda1

Sie können den Anweisungen hier folgen, um die Größe des Bildes zu ändern https://Gist.github.com/joost/a7cfa7b741d9d39c1307

1
Nerrve

Anscheinend gibt es einige Möglichkeiten, wie dies auftreten kann. Das Problem, das ich hatte, war, dass das Docker-Disk-Image seine maximale Größe erreicht hatte (Docker Whale -> Preferences -> Disk, wenn Sie anzeigen möchten, welche Größe in OSX angezeigt wird). 

Ich erhöhte das Limit und war gut zu gehen. Ich bin sicher, dass das Aufräumen nicht verwendeter Bilder auch funktionieren würde.

1
SnellyBigoda

In meinem Fall erstellte die Installation des Ubuntu-Servers 18.04.1 [aus einem seltsamen Grund] ein logisches LVM-Volume mit nur 4 GB anstelle von 750 GB .. _ Beim Abrufen von Bildern würde ich daher den Fehler "Kein Speicherplatz auf Gerät" erhalten Der Fix ist einfach:

lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
0
Kostyantyn