Docker Machine: il ne reste plus d'espace sur l'appareil

126

J'essaye de configurer Docker Machine avec Docker Compose.

Scénario 1 (sans Docker Machine)
Si je cours docker-compose up -dsans Docker Machine, il crée mes 3 conteneurs liés comme prévu (nginx + mongodb + nodejs).

Scénario 2 (avec Docker Machine)
Ensuite, je crée une VM à l'aide de Docker Machine et je dis à Docker de parler à cette machine avec eval $(docker-machine env streambacker-dev).

À ce stade, si je ssh sur ma machine docker et que df -hje l' exécute , j'obtiens:

machine docker df -h

Si je cours ensuite docker-compose up -d, j'obtiens une erreur «aucun espace laissé sur l'appareil» lors du téléchargement du dernier conteneur.

"tmpfs" semble en effet être un peu plein après cela:

machine docker df -h

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

Merci!

Pour plus d'informations, j'utilise Docker Machine 0.4.0-rc2 et Docker Compose 1.3.2 .

Marc Perrin-Pelletier
la source
4
Cela tmpfsn'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'y accède à votre disque.
0x7d7b
Merci @ h3nrik pour cette information.
Marc Perrin-Pelletier
2
vérifiez avec les éléments suspendus du docker, comme les images pendantes, les volumes pendantes et supprimez-les. docker rmi $(docker images -f dangling=true -q)etdocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Réponses:

87

Comme dit ci-dessus, le tmpfsn'a rien à voir avec --virtualbox-disk-size. Il semble que boot2docker se montetmpfs en mémoire, vous devez donc consacrer plus de mémoire à votre virtualbox vm. Vous pouvez le faire en spécifiant le --virtualbox-memoryparamètre.

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

Valeurs 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
docker@testA:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                   896.6M    112.7M    783.9M  13% /

Avec --virtualbox-memoryréglé sur8096

$ 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
la source
14
Pas très intuitif, mais cela a fonctionné. Qu'est-ce que diable, Docker?
BastiBen du
1
Pas intuitif en effet! Cependant, cela semble être le problème et l'a résolu pour moi. Donc, +1.
Ray Pendergraph
Correction du problème pour moi aussi, je ne comprends pas comment mais, merci!
Bendihossan
Existe-t-il un moyen d'augmenter la taille par défaut pour ne pas avoir à la spécifier manuellement à chaque fois?
CGFoX
124

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

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

Attention soyez très prudent avec cela si vous avez des données que vous souhaitez conserver

Nettoyer:

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

Commandes supplémentaires:

Liste des volumes pendantes:

$ docker volume ls -qf dangling=true

Lister tous les volumes:

$ docker volume ls

2. Pensez également à supprimer toutes les images inutilisées.

Débarrassez-vous d'abord du <none> images (celles-ci sont parfois générées lors de la construction d'une image et si pour une raison quelconque la construction de l'image a été interrompue, elles y restent).

voici un joli script que j'utilise pour les supprimer

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

Ensuite, si vous utilisez Docker Compose pour créer des images localement pour chaque projet. Vous vous retrouverez avec beaucoup d'images généralement nommées comme votre dossier (par exemple, si votre dossier de projet s'appelle Hello, vous trouverez le nom des images Hello_blablabla). alors pensez également à supprimer toutes ces images

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

docker rmi {image-name}

Mahmoud Zalt
la source
3
Sur Mac , je devais utiliser des guillemets simples ( ') autour des valeurs de l' argument: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). La suppression des conteneurs arrêtés peut être effectuée docker rm $(docker ps -qa --no-trunc --filter "status=exited")comme décrit ici: stackoverflow.com/a/32723127/619659 .
Webdevotion
1
J'avais tellement d'images inutilisées, j'ai atteint la limite de caractères de mon shell. C'est pourquoi je l'ai fait docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun
1
La suppression des images inutiles m'a aidé.
akauppi
docker volume prune
justin.m.chase
.. voir ma description étape par étape pour redimensionner / var / lib / docker en utilisant resize2fs dans un autre thread: stackoverflow.com/questions/32485723/…
Alex
66

Si vous utilisez Docker Community Edition:

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

Si vous utilisez boot2docker (docker-machine), effacez les volumes qui sont orphelins:

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

Effacer les images inutilisées:

 docker rmi $(docker images -q -f "dangling=true")
Alex Efimov
la source
6
docker system prunem'a aidé
Maxim Yefremov
2
docker system pruneftw
Michael Guild
1
docker volume prunepour les volumes seulement, l'élagage du système n'effacera pas les volumes suspendus.
justin.m.chase
Lorsque ce qui précède ne vous libère pas suffisamment d'espace, voici l'option nucléaire: docker rmi $(docker images -q) . Ajoutez --forcesi vous devez quand il ignore un groupe de calques inclus dans plusieurs conteneurs.
EmptyArsenal le
14

A. SUPPRIMER LES IMAGES INUTILISÉES

à l'aide des commandes docker rm ou docker rmi, vous pouvez supprimer les images dont vous n'avez pas besoin. Existe en fait une image qui aide dans cette tâche (martin / docker-cleanup-volumes). La base est de commencer la sélection à partir de votre liste d'images et de conteneurs:

docker ps -a -s

MODIFIER LE DESCRIPTEUR DOCKER JSON

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 s'il fonctionne dans d'autres systèmes d'exploitation (pas dans Windows).

C. REDIMENSIONNEMENT LINUX:

dans le système d'exploitation Windows, la machine docker ou boot2docker est en fait une virtualbox vm, vous pouvez alors suivre la procédure pour redimensionner le disque. Prenez soin de sauvegarder les fichiers. La procédure générale est de faire un redimensionnement dans virtualbox puis d'utiliser un utilitaire appelé gpartd pour modifier l'espace perçu par linux dans ses partitions. Il existe quelques liens pour effectuer cette procédure référencés ci-dessous:

D.RÉCRÉER LE DOCKER-MACHINE / BOOT2DOCKER

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

docker-machine rm par défaut

docker-machine create --driver virtualbox --virtualbox-disk-size "100100" par défaut

par défaut d'environnement de docker-machine

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

andhdo
la source
Merci. Je travaillais sur Windows. Je l'ai fait en recréant la machine docker.
KinoP
Helped the D: (recréation de la machine docker)
StanislavL
Merci, recréer le docker-machine a fonctionné pour moi (je suis sous windows)
Lucha Laura Hardie
Je ressens tellement d'amour!
eduyayo le
2

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

entrez la description de l'image ici initialement - lorsque les machines ont démarré - j'obtenais toujours une erreur Aucun espace laissé sur le périphérique, mais cela a été résolu peu de temps après.

johndpope
la source
0

J'ai rencontré ce problème et je n'ai pas pu ajouter d'espace supplémentaire avec l'interface utilisateur de docker pour mac, j'ai installé docker avec homebrew et j'ai exécuté la commande suivante lors de la création de ma machine:

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

cela ajoute le double de l'espace mémoire et de la taille du disque à la virtualbox que j'avais auparavant et vous pouvez ajouter ici la taille des paramètres dont vous avez besoin comme bon vous semble

aabiro
la source