2015-08-09 5 views
90

Je suis en train de mettre en place la machine Docker avec Docker Compose.Docker Machine: Pas d'espace sur le périphérique

Scénario 1 (sans Docker Machine)
Si je lance docker-compose up -d sans Docker machine, il crée mes 3 conteneurs liés comme intented (nginx + MongoDB + nodejs).

Scénario 2 (avec Docker Machine)
Puis-je créer une machine virtuelle en utilisant la machine Docker et dire Docker parler à cette machine avec eval $(docker-machine env streambacker-dev).

À ce stade, si je ssh à ma machine docker et exécuter df -h, je reçois:

docker machine df -h

Si je lance alors docker-compose up -d, je reçois un "no space left on device" error lors du téléchargement du dernier conteneur.

« tmpfs » semble être en effet un peu complet après:

docker machine df -h

Vérification de l'option --virtualbox-disque de taille montre que sa valeur par défaut de 20000 Mo, ce qui je pense est ce que nous pouvons voir comme "/ dev/sda1" sur les deux images. Alors pourquoi les conteneurs remplissent-ils "tmpfs" n et qu'est-ce que "tmpfs" exactement? Est-ce un répertoire de téléchargement temporaire? Comment puis-je créer plus d'espace pour mes conteneurs?

Merci!

Pour plus d'informations, je suis en utilisant Docker machine 0.4.0-RC2 et Docker Compose 1.3.2.

+4

Le ['tmpfs'] (https://en.wikipedia.org/wiki/Tmpfs) n'a rien à voir avec' --virtualbox-disk-size'. C'est un système de fichiers (comme un disque RAM) monté en mémoire et rien n'accède à votre disque. – h3nrik

+0

Merci @ h3nrik pour cette information. –

Répondre

69

Comme dit plus haut, le tmpfs n'a rien à voir avec --virtualbox-disk-size. Il semble que boot2docker monte tmpfs dans la mémoire, donc vous devez consacrer plus de mémoire à votre virtualbox vm. Vous pouvez le faire en spécifiant le paramètre --virtualbox-memory.

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

par défaut:

$ 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%/

Avec --virtualbox-memory ensemble à 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

Pas très intuitif, mais cela a fonctionné. Que diable, Docker? – BastiBen

+0

Pas intuitif en effet! Cependant, cela semble être le problème avec ceci et l'a arrangé pour moi. Donc, +1. –

+4

semblerait que boot2docker monte tmpfs en mémoire .. – Tommy

73

J'ai eu la même erreur ([ERROR] InnoDB: Error number 28 means 'No space left on device') et de le résoudre de cette façon:

1. Supprimez les volumes orphelins dans Docker, vous pouvez utiliser la commande intégrée de volume docker. La commande intégrée supprime également tout répertoire dans/var/lib/docker/volumes qui n'est pas un volume, donc assurez-vous de ne rien y mettre.

Avertissement être très prudent avec cela si vous avez des données que vous voulez garder

Nettoyage:

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

commandes supplémentaires:

Liste des volumes ballants:

$ docker volume ls -qf dangling=true 

Lister tous les volumes:

$ docker volume ls 

2. Envisagez également de supprimer toutes les images inutilisées. Commencez par vous débarrasser des images <none> (celles-ci sont parfois générées lors de la construction d'une image et si, pour une raison quelconque, le bâtiment de l'image a été interrompu, elles restent là).

est ici un script bien que j'utilise pour les enlever

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

Ensuite, si vous utilisez Docker Compose pour construire des images localement pour chaque projet. Vous allez vous retrouver avec beaucoup d'images généralement nommées comme votre dossier (exemple si votre dossier de projet nommé Bonjour, vous trouverez des images nom Hello_blablabla). donc envisager également la suppression de toutes ces images

vous pouvez modifier le script ci-dessus pour les supprimer ou les supprimer manuellement avec

docker rmi {image-name}

+3

Sur Mac, je devais utiliser des guillemets simples (') autour des valeurs des arguments: 'docker rmi $ (images docker | grep'^ '| awk' {print $ 3} ')'. La suppression des conteneurs arrêtés peut être effectuée avec docker rm $ (docker ps -qa --no-trunc --filter "status = exited") 'comme décrit ici: http://stackoverflow.com/a/32723127/619659. – Webdevotion

+0

J'avais tellement d'images inutilisées, j'ai atteint la limite de caractères de mon shell. C'est pourquoi j'ai fait des images docker | grep "^ " | xargs docker rmi'. –

+0

Enlever les images inutiles m'a aidé. – akauppi

9

A. RETIRER DES IMAGES INUTILISÉES

en utilisant la rm docker ou docker rmi commandes vous pouvez supprimer les images dont vous n'avez pas besoin. Existe réellement une image qui aide dans cette tâche (martin/docker-cleanup-volumes). La base est de commencer selectig de vos images et la liste des conteneurs:

docker ps -a -s

B. ACTUALISATION docker JSON DESCRIPTOR

il est mentionné dans certains forums. L'idée est d'incrémenter le descripteur situé dans ~/.docker/machine/machines/default/config.json. Le paramètre semble être DiskSize mais je ne sais pas si cela fonctionne dans d'autres systèmes d'exploitation (pas dans Windows).

C. LINUX Redimensionner:

dans Windows OS, machine à docker ou boot2docker est en fait une vm VirtualBox, vous pouvez suivre la procédure pour redimensionner le disque. Prenez soin de sauvegarder les fichiers. La procédure générale consiste à redimensionner dans virtualbox puis à utiliser un utilitaire appelé gpartd pour modifier l'espace perçu par linux dans ses partitions. Il y a des liens à faire cette procédure indiquée ci-dessous:

D. RECREATE docker-MACHINE/BOOT2DOCKER

L'idée est recréez le docker-machine par défaut. Les commandes suivantes peuvent vous illustrer. Notez que lorsque vous recréez boot2docker, vous perdez les images docker téléchargées précédemment.

docker machine rm par défaut

docker machine créer --driver virtualbox --virtualbox-disque de taille "100100" default

docker machine par défaut env

puis vous pouvez aller à la boîte virtuelle et voir l'espace boot2docker avec la commande "df -h"

+0

Merci. Je travaillais sur Windows. Je l'ai fait en recréant la docker-machine. – KinoP

+0

A aidé le D: (recréer la machine docker) – StanislavL

+0

Merci, recréer la docker-machine a fonctionné pour moi (je suis sur windows) –

24

Si vous utilisez Docker Community Edition:

système docker pruneau

Si vous utilisez boot2docker (docker machine) effacer les volumes qui sont devenus orphelins:

volume docker rm $ (ls volume docker de la ballants = true)

images inutilisées claires:

docker rmi $ (images docker -q -f "ballants = true")

0

Sur docker osx/I a pu appuyer sur un bouton [Déplacer l'image disque] et déplacé avec succès Docker.qcow2 (contenant probablement des conteneurs/images)

enter image description here au départ - quand les machines ont commencé - je encore obtenir un Pas d'espace sur erreur de périphérique mais résolu peu après.