2015-08-09 11 views
90

Ich versuche, Docker Machine mit Docker Compose einzurichten.Docker-Maschine: Kein Platz mehr auf Gerät

Szenario 1 (ohne Docker Machine)
Wenn ich docker-compose up -d ohne Docker Maschine laufen, schafft es meine 3 verknüpfte Container als intented (nginx + mongodb + NodeJS).

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

An diesem Punkt, wenn ich meine Docker Maschine ssh und laufen df -h, erhalte ich:

docker machine df -h

Wenn ich docker-compose up -d dann laufen, ich ein "no space left on device" error bekommen, während der letzte Behälter herunterzuladen.

"tmpfs" scheint danach in der Tat ein bisschen voll zu sein:

docker machine df -h

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

Vielen Dank!

Informationen, ich bin mit Docker Maschine 0.4.0-RC2 und Docker Compose 1.3.2.

+4

Die ['tmpfs'] (https://en.wikipedia.org/wiki/Tmpfs) hat nichts mit' --virtualbox-disk-size' zu ​​tun. Es ist ein Dateisystem (wie eine RAM-Disk), das in den Speicher eingebunden ist und nichts, auf das Sie zugreifen können. – h3nrik

+0

Danke @ h3nrik für diese Information. –

Antwort

69

Wie oben erwähnt, hat die tmpfs nichts mit --virtualbox-disk-size zu tun. Es scheint, dass boot2docker mounts tmpfs in den Speicher mountet, so dass Sie mehr Speicher für Ihre virtualbox vm reservieren müssen. Sie können dies tun, indem Sie den Parameter --virtualbox-memory angeben.

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

Defaults:

$ 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 
[email protected]:~$ df -h/
Filesystem    Size  Used Available Use% Mounted on 
tmpfs     896.6M 112.7M 783.9M 13%/

Mit --virtualbox-memory Set 8096

$ 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 
[email protected]:~$ df -h/
Filesystem    Size  Used Available Use% Mounted on 
tmpfs      6.9G 112.4M  6.8G 2%/
+9

Nicht sehr intuitiv, aber das hat funktioniert. Was zum Teufel, Docker? – BastiBen

+0

Nicht intuitiv! Dies scheint jedoch das Problem zu sein und hat es für mich behoben. Also, +1. –

+4

würde scheinen, dass boot2docker mount tmpfs im Speicher mountet. – Tommy

73

hatte ich den gleichen Fehler ([ERROR] InnoDB: Error number 28 means 'No space left on device') und es auf diese Weise lösen:

1. Löschen Sie die verwaisten Volumes in Docker. Sie können den integrierten Befehl docker volume verwenden. Der integrierte Befehl löscht auch jedes Verzeichnis in/var/lib/docker/volumes, das kein Volume ist. Stellen Sie also sicher, dass Sie nichts gespeichert haben, das Sie speichern möchten.

Warnung sehr vorsichtig sein, damit, wenn Sie einige Daten haben Sie

Cleanup behalten möchten:

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

Zusätzliche Befehle:

Liste baumelnden Bände:

$ docker volume ls -qf dangling=true 

Alle Bände auflisten:

$ docker volume ls 

2. Ziehen Sie auch in Betracht, alle unbenutzten Bilder zu entfernen.

Zuerst die Bilder <none> loswerden (diese werden manchmal beim Erstellen eines Bildes erzeugt und wenn aus irgendeinem Grund das Bildaufbau unterbrochen wurde, bleiben sie dort).

hier ist ein schönes Skript, das ich sie

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

dann zu entfernen, wenn Sie Docker Compose verwenden Bilder für jedes Projekt vor Ort zu bauen. Sie werden am Ende mit einer Menge von Bildern enden, die normalerweise wie Ihr Ordner benannt sind (Beispiel, wenn Ihr Projektordner Hello heißt, finden Sie den Namen des Bildes Hello_blablabla). so betrachten auch alle diese Bilder zu entfernen

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

docker rmi {image-name}

+3

Am Mac musste ich einfache Anführungszeichen (') um die Argumentwerte verwenden: 'docker rmi $ (docker images | grep'^ '| awk' {print $ 3} ')'. Das Entfernen von gestoppten Containern kann mit 'docker rm $ (docker ps -qa --no-trunc --filter" status = exited ")' wie hier beschrieben durchgeführt werden: http://stackoverflow.com/a/32723127/619659. – Webdevotion

+0

Ich hatte so viele unbenutzte Bilder, dass ich die Zeichengrenze meiner Shell erreichte. Deshalb habe ich 'docker images | grep "^ " | xargs docker rmi'. –

+0

Das Entfernen unnötiger Bilder half mir. – akauppi

9

A. UNUSED IMAGES ENTFERNT

mit dem Docker rm oder Docker rmi Befehle können Sie die Bilder entfernen, die Sie nicht benötigen. Tatsächlich existiert ein Bild, das bei dieser Aufgabe hilft (martin/docker-cleanup-volumes). Die Basis ist selectig aus Ihren Bildern und Container-Liste zu starten:

Docker ps -a -s

B. Ändern Sie die DOCKER JSON DESCRIPTOR

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

C. LINUX RESIZE:

in Windows OS, Docker Maschine oder boot2docker ist in der Tat ein virtualbox vm, dann können Sie die Prozedur folgen der Platte zu ändern. Achten Sie darauf, die Dateien zu sichern. Das allgemeine Verfahren besteht darin, eine Größenänderung in virtualbox vorzunehmen und dann ein Utility namens gpartd zu verwenden, um den von Linux in seinen Partitionen wahrgenommenen Raum zu modifizieren. Es gibt einige Links dieses Verfahren unten verwiesen zu tun:

D. RECREATE DIE DOCKER-MACHINE/BOOT2DOCKER

Die Idee neu ist die Standard-Docker-Maschine. Die folgenden Befehle können Sie veranschaulichen. Beachten Sie, dass Sie bei der Neuerstellung von boot2docker die zuvor heruntergeladenen Docker-Images verloren haben.

Docker-Maschine rm Standard

Docker-Maschine --driver erstellen virtualbox --virtualbox-Disk-Größe "100100" default

Docker-Maschine env Standard

dann Sie können zum virtuellen Feld gehen und den Boot2docker-Bereich mit dem Befehl "df -h" sehen

+0

Danke. Ich habe an Windows gearbeitet. Ich habe es geschafft, indem ich die Docker-Maschine neu geschaffen habe. – KinoP

+0

Hilft dem D: (Erstelle Docker Maschine) – StanislavL

+0

Danke, die Docker-Maschine neu zu arbeiten hat für mich funktioniert (Ich bin auf Windows) –

24

Wenn Sie Docker Community Edition verwenden:

Docker System Prune

Wenn Sie boot2docker (Docker-Maschine) Löschen die Volumes verwenden, die verwaist sind:

Docker Volumen rm $ (Docker Volumen ls -qf baumelnden = wahr)

Klar nicht verwendete Bilder:

Docker rmi $ (Docker Bilder -q -f "baumelnden = true")

0

Auf Docker osx/konnte ich eine Taste [Verschieben Disk Image] und es bewegt drücken erfolgreich die Docker.qcow2 (vermutlich enthaltenden Behälter/images)

enter image description here zunächst - wenn Maschinen gestartet - ich war noch immer ein Kein Platz mehr auf dem Gerät Fehler aber es kurz nach aufgelöst.

Verwandte Themen