Docker-Maschine: Auf dem Gerät ist kein Platz mehr vorhanden

126

Ich versuche, Docker Machine mit Docker Compose einzurichten.

Szenario 1 (ohne Docker-Maschine)
Wenn ich docker-compose up -dohne Docker-Maschine ausgeführt werde, werden meine 3 verknüpften Container wie beabsichtigt erstellt (nginx + mongodb + nodejs).

Szenario 2 (mit Docker Machine)
Dann erstelle ich mit Docker Machine eine VM und fordere Docker auf, mit dieser Maschine zu sprechen eval $(docker-machine env streambacker-dev).

Wenn ich zu diesem Zeitpunkt zu meinem Docker-Computer ssh und laufe df -h, erhalte ich:

Docker-Maschine df -h

Wenn ich dann starte docker-compose up -d, wird beim Herunterladen des letzten Containers die Fehlermeldung "Kein Speicherplatz mehr auf dem Gerät" angezeigt .

"tmpfs" scheint danach tatsächlich etwas voll zu sein:

Docker-Maschine df -h

Überprüfen der --virtualbox-Disk-Größe Option zeigt , dass es standardmäßig auf 20000 MB, was meiner Meinung nach ist das, was wir als „/ dev / sda1“ auf beiden Bildern sehen. Warum füllen Container also "tmpfs" n und was genau ist "tmpfs"? Ist ein temporäres Download-Verzeichnis? Wie kann ich mehr Platz für meine Container schaffen?

Vielen Dank!

Zur Information verwende ich Docker Machine 0.4.0-rc2 und Docker Compose 1.3.2 .

Marc Perrin-Pelletier
quelle
4
Das tmpfshat nichts damit zu tun --virtualbox-disk-size. Es ist ein Dateisystem (wie eine RAM-Disk), das im Speicher installiert ist, und es gibt dort keinen Zugriff auf Ihre Disk.
0x7d7b
Danke @ h3nrik für diese Information.
Marc Perrin-Pelletier
2
Überprüfen Sie mit den baumelnden Sachen des Dockers, wie baumelnde Bilder, baumelnde Volumes und löschen Sie sie. docker rmi $(docker images -f dangling=true -q)unddocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Antworten:

87

Wie oben gesagt, tmpfshat das nichts damit zu tun --virtualbox-disk-size. Es scheint, als würde boot2docker tmpfsin den Speicher eingebunden , sodass Sie Ihrer virtualbox vm mehr Speicher zuweisen müssen. Sie können dies tun, indem Sie den --virtualbox-memoryParameter angeben.

   --virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]

Standardeinstellungen:

$ docker-machine create --driver virtualbox testA
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testA
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testA:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   896.6M    112.7M    783.9M  13% /

Mit --virtualbox-memoryeingestellt auf8096

$ docker-machine create --driver virtualbox --virtualbox-memory 8096 testB
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testB
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /
wtekiela
quelle
14
Nicht sehr intuitiv, aber das hat funktioniert. Was zum Teufel, Docker?
BastiBen
1
In der Tat nicht intuitiv! Dies scheint jedoch das Problem zu sein und hat es für mich behoben. Also +1.
Ray Pendergraph
Das Problem wurde auch für mich behoben, ich verstehe nicht wie, aber danke!
Bendihossan
Gibt es eine Möglichkeit, die Standardgröße zu erhöhen, damit ich sie nicht jedes Mal manuell angeben muss?
CGFoX
124

Ich hatte den gleichen Fehler ( [ERROR] InnoDB: Error number 28 means 'No space left on device') 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:

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

Zusätzliche Befehle:

Liste baumelnder Bände:

$ docker volume ls -qf dangling=true

Alle Bände auflisten:

$ docker volume ls

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

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

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 entfernen

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

docker rmi {image-name}

Mahmoud Zalt
quelle
3
Auf dem Mac musste ich einfache Anführungszeichen (') um die Argumentwerte verwenden : docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). Das Entfernen angehaltener Container kann docker rm $(docker ps -qa --no-trunc --filter "status=exited")wie hier beschrieben erfolgen: stackoverflow.com/a/32723127/619659 .
Webdevotion
1
Ich hatte so viele unbenutzte Bilder, dass ich die Zeichenbeschränkung meiner Shell erreichte. Deshalb habe ich getan docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun
1
Das Entfernen nicht benötigter Bilder hat mir geholfen.
Akauppi
docker volume prune
justin.m.chase
.. siehe meine Schritt-für-Schritt-Beschreibung für die Größenänderung von / var / lib / docker mit resize2fs in einem anderen Thread: stackoverflow.com/questions/32485723/…
Alex
65

Wenn Sie Docker Community Edition verwenden:

 docker system prune
 docker volume prune  # as suggested by @justin-m-chase since system prune does not clean volumes.

Wenn Sie boot2docker (Docker-Maschine) verwenden, löschen Sie die verwaisten Volumes:

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

Nicht verwendete Bilder löschen:

 docker rmi $(docker images -q -f "dangling=true")
Alex Efimov
quelle
6
docker system prunehat mir geholfen
Maxim Yefremov
2
docker system pruneftw
Michael Guild
1
docker volume pruneNur für Volumes löscht die Systembereinigung die baumelnden Volumes nicht.
justin.m.chase
Wenn Ihnen oben nicht genügend Platz zur Verfügung steht, haben Sie folgende nukleare Option : docker rmi $(docker images -q). Fügen --forceSie hinzu, wenn Sie müssen, wenn mehrere Ebenen übersprungen werden, die in mehreren Containern enthalten sind.
EmptyArsenal
14

A. ENTFERNEN SIE NICHT VERWENDETE BILDER

Mit den Befehlen docker rm oder docker rmi können Sie die nicht benötigten Bilder entfernen. Tatsächlich gibt es ein Image, das bei dieser Aufgabe hilft (Martin / Docker-Cleanup-Volumes). Die Basis besteht darin, die Auswahl aus Ihrer Bilder- und Containerliste zu starten:

Docker ps -a -s

B. ÄNDERN SIE DEN DOCKER JSON DESCRIPTOR

es wird in einigen Foren erwähnt. Die Idee ist, den Deskriptor in ~ / .docker / machine / machine / default / config.json zu erhöhen. Der Parameter scheint DiskSize zu sein, aber ich weiß nicht, ob es in anderen Betriebssystemen funktioniert (nicht in Windows).

C. LINUX RESIZE:

Unter Windows ist Docker oder boot2docker tatsächlich eine Virtualbox-VM. Anschließend können Sie die Schritte zum Ändern der Größe der Festplatte ausführen. Achten Sie darauf, die Dateien zu sichern. Das allgemeine Verfahren besteht darin, eine Größenänderung in der Virtualbox vorzunehmen und dann ein Hilfsprogramm namens gpartd zu verwenden, um den von Linux in seinen Partitionen wahrgenommenen Speicherplatz zu ändern. Es gibt einige Links zu diesem Verfahren, auf die unten verwiesen wird:

D. ERHOLEN SIE DIE DOCKER-MASCHINE / BOOT2DOCKER

Die Idee ist, die Standard-Docker-Maschine neu zu erstellen. Die folgenden Befehle können Sie veranschaulichen. Beachten Sie, dass Sie beim Neuerstellen des boot2docker die zuvor heruntergeladenen Docker-Images verlieren.

Docker-Maschine rm Standard

Docker-Maschine erstellen --driver virtualbox --virtualbox-disk-size "100100" Standard

Docker-Maschine env Standard

Dann können Sie zur virtuellen Box gehen und den boot2docker-Bereich mit dem Befehl "df -h" anzeigen.

andhdo
quelle
Vielen Dank. Ich habe an Windows gearbeitet. Ich habe es geschafft, indem ich die Docker-Maschine neu erstellt habe.
KinoP
Hat dem D geholfen: (Docker-Maschine neu erstellen)
StanislavL
Vielen Dank, die Docker-Maschine neu zu erstellen hat für mich funktioniert (ich bin auf Windows)
Lucha Laura Hardie
Ich fühle so viel Liebe!
Eduyayo
2

Auf Docker konnte osx / I eine Taste [ Move Disk Image ] drücken und Docker.qcow2 (vermutlich mit Containern / Images) erfolgreich verschoben.

Geben Sie hier die Bildbeschreibung ein Anfangs - als die Maschinen gestartet wurden - wurde immer noch ein Fehler "Kein Speicherplatz mehr auf dem Gerät" angezeigt, der jedoch kurz darauf behoben wurde.

Johndpope
quelle
0

Ich bin auf dieses Problem gestoßen und konnte mit der Docker-Benutzeroberfläche für Mac keinen zusätzlichen Speicherplatz hinzufügen. Ich habe Docker mit Homebrew installiert und beim Erstellen meines Computers den folgenden Befehl ausgeführt:

docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default

Dadurch wird der virtuellen Box, die ich zuvor hatte, doppelt so viel Speicherplatz und Festplattengröße hinzugefügt, und Sie können hier die gewünschte Einstellungsgröße hinzufügen, wie Sie es für richtig halten

aabiro
quelle