2016-12-19 2 views
6

Ich verwende ein Mac-natives Docker (kein virtualbox/docker-machine).Wie kann ich den Fehler 'Kein Platz auf dem Gerät hinterlassen' in Docker beheben?

Ich habe ein riesiges Bild mit viel Infrastruktur drin (Postgres, etc.). Ich habe Säuberungsskripte ausgeführt, um viele unbrauchbare Bilder loszuwerden und so weiter.

Wenn ich mein Bild laufen bekomme ich einen Fehler wie:

could not create directory "/var/lib/postgresql/data/pg_xlog": No space left on device 

Auf meinem Host-Mac/var wird bei 60% Platz sitzen und in der Regel meine Platte hat viel Stauraum frei.

Ist das etwas Docker-Konfiguration, die ich stoßen muss, um es mehr Ressourcen zu geben?

Relevante Linien von mount innen Docker:

none on/type aufs (rw,relatime,si=5b19fc7476f7db86,dio,dirperm1) 
/dev/vda1 on /data type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/hostname type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/hosts type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /var/lib/postgresql/data type ext4 (rw,relatime,data=ordered) 

Hier df:

[11:14] 
Filesystem  1K-blocks Used Available Use% Mounted on 
none   202054928 4333016 187269304 3%/
tmpfs   1022788  0 1022788 0% /dev 
tmpfs   1022788  0 1022788 0% /sys/fs/cgroup 
/dev/vda1  202054928 4333016 187269304 3% /data 
shm    65536  4  65532 1% /dev/shm 
tmpfs    204560  284 204276 1% /run/docker.sock 
+0

Was sehen Sie, wenn Sie 'mount' und' df' als root in der Instanz Docker laufen? (Fügen Sie es der Frage hinzu) - geben Sie uns auch die relevanten Teile der 'docker inspect' Ausgabe für den laufenden Container. – slim

+0

OK, der interessante Teil ist, dass Sie '/ dev/vda1' als'/var/lib/postgresql/data' (sowie '/ data' ) angehängt haben. Aber es hat genau den gleichen freien Platz wie '/' also ist wahrscheinlich das gleiche Volumen unter den Deckeln, und es ist in dem Moment, in dem du 'df' liefst, nicht annähernd voll. Ich verzichte auf die Docker Götter. 'docker inspect' wird wahrscheinlich mehr verraten. – slim

+0

Standardmäßig erhalten Container 10 GB Speicherplatz, das ist wahrscheinlich die Wand, in die Sie hineinlaufen. Ich habe im Moment keine Zeit, viel weiter zu suchen, aber ich glaube, Sie können es erhöhen und einen Blick auf https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/ –

Antwort

1

Ich lief dies in vor kurzem auf einer Docker Installation auf Linux, die die devicemapper Speichertreiber (Standard) verwendet. Es gab in der Tat eine Docker-Konfiguration, die ich ändern musste, um dies zu beheben.

Docker-Images bestehen aus schreibgeschützten Schichten von Dateisystem-Snapshots, wobei jede Ebene von einem Befehl in Ihrem Dockerfile erstellt wird, der auf einem gemeinsamen Basisspeicher-Snapshot basiert. Der Basis-Snapshot wird von allen Ihren Bildern gemeinsam genutzt und hat ein Dateisystem mit einer Standardgröße von 10 GB. Wenn Sie Ihr Image ausführen, erhalten Sie eine neue beschreibbare Ebene über allen Layern im Bild, sodass Sie neue Dateien in Ihrem laufenden Container hinzufügen können, aber es basiert immer noch auf dem gleichen Basis-Snapshot mit dem 10 GB Dateisystem. Dies gilt zumindest für devicemapper, nicht sicher über andere Treiber. Here ist die relevante Dokumentation von Docker.

Um diesen Standardwert in etwas anderes zu ändern, gibt es einen Daemon-Parameter, den Sie z. docker daemon --storage-opt dm.basesize=100G. Da Sie den Daemon wahrscheinlich nicht manuell ausführen müssen, müssen Sie die Optionen des Andock-Daemons in einer Datei bearbeiten, je nachdem, wie Sie den Andock-Daemon ausführen. Mit docker für mac können Sie die Daemon-Parameter als JSON in den Einstellungen unter Daemon->Advanced bearbeiten. Sie müssen wahrscheinlich so etwas fügen:

{ 
    "storage-opts": ["dm.basesize=100G"] 
} 

(aber wie ich schon sagte, ich hatte dieses Problem auf Linux, so nicht die oben versuchen).

Damit dies wirksam wird, müssen Sie alle vorhandenen Bilder entfernen (damit sie auf dem neuen Basis-Snapshot mit der neuen Größe neu erstellt werden). Siehe storage driver options.

+0

werfen Beachten Sie, dass dies nur für devicemapper gilt und OSX dies nicht verwendet: https://github.com/docker/for-mac/issues/2134 – pcambra

0

ich nicht viele Möglichkeiten für diese gefunden haben, ist das Hauptproblem in Github https://github.com/docker/for-mac/issues/371

Einige der Optionen vorgeschlagen sind:

  • Wenn Sie alle Bilder/Container entfernen, können Sie gehen Sie folgendermaßen vor:

docker rm $(docker ps -a -q) docker rmi $(docker images -q) docker volume rm $(docker volume ls |awk '{print $2}') rm -rf ~/Library/Containers/com.docker.docker/Data/*

  • Sie können versuchen, alle nicht verwendeten Bilder/Container zu beschneiden, aber das hat sich als nicht sehr effektiv:

docker system prune

  • Verwenden Sie ein Schablonenbild, das größer ist, installieren Sie qemu Homebrew verwenden und das Bild zu bewegen, Sehen Sie diesen spezifischen Kommentar: https://github.com/docker/for-mac/issues/371#issuecomment-242047368 aber Sie müssen mindestens 2x Speicherplatz übrig haben, um dies zu tun, ohne Container/Bilder zu verlieren.

Siehe auch: How do you get around the size limitation of Docker.qcow2 in the Docker for Mac? Und https://forums.docker.com/t/no-space-left-on-device-error/10894/26

Verwandte Themen