web-dev-qa-db-fra.com

Machine Docker: Il n'y a plus d'espace disponible sur l'appareil

J'essaie de configurer Docker Machine avec Docker Compose.

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

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

À ce stade, si je ssh sur mon ordinateur de docker et exécute df -h, je reçois: 

docker machine df -h

Si je lance ensuite docker-compose up -d, j'obtiens une erreur "il ne reste plus d'espace sur le périphérique" lors du téléchargement du dernier conteneur.

"tmpfs" semble en effet un peu complet après cela:

docker machine df -h

Le fait de cocher la case --virtualbox-disk-size indique que la valeur par défaut est 20000 Mo, ce qui, à mon avis, correspond à 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"? Est-ce un répertoire de téléchargement temporaire? Comment puis-je créer plus d'espace pour mes conteneurs?

Merci!

Pour information, j'utilise Docker Machine 0.4.0-rc2 _ et Docker Compose 1.3.2_.

107
Marc Pe-Pe

Comme indiqué ci-dessus, la tmpfs n'a rien à voir avec --virtualbox-disk-size. Il semble que boot2docker monte tmpfs en mémoire. Vous devez donc consacrer plus de mémoire à votre machine virtuelle virtualbox. 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]

Défauts:

$ 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-memory défini sur 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
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /
79
wtekiela

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

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

Attention, soyez très prudent si vous souhaitez conserver certaines données.

Nettoyer:

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

Commandes supplémentaires:

Liste des volumes suspendus:

$ docker volume ls -qf dangling=true

Répertoriez tous les volumes:

$ docker volume ls

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

Commencez par supprimer les images <none> (celles-ci sont parfois générées lors de la création d’une image et si, pour une raison quelconque, la construction de l’image a été interrompue, elles y restent).

voici un bon script que j'utilise pour les supprimer 

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

Ensuite, si vous utilisez Docker Compose pour générer des images localement pour chaque projet. Vous allez vous retrouver avec beaucoup d'images généralement nommées comme votre dossier (par exemple, si votre dossier de projet s'appelle Bonjour, vous trouverez le nom d'image Hello_blablabla). alors aussi envisager de supprimer toutes ces images

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

docker rmi {image-name}

100
Mahmoud Zalt

Si vous utilisez Docker Community Edition: 

système de docker Prune

Si vous utilisez boot2docker (docker-machine), supprimez les volumes orphelins: 

volume du menu fixe rm $ (volume du menu fixe ls -qf dangling = true)

Effacer les images inutilisées: 

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

44
Alex Efimov

A. SUPPRIMER LES IMAGES NON UTILISÉES 

en utilisant les commandes docker rm ou docker rmi, vous pouvez supprimer les images dont vous n’avez pas besoin. Il existe en réalité une image qui aide dans cette tâche (martin/docker-cleanup-volumes). La base est de commencer à sélectionner dans votre liste d’images et de conteneurs: 

docker ps -a -s

B. MODIFIER LE DESCRIPTEUR DOCKER JSON

c'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 REDIMENSIONNEMENT:

sous Windows, docker machine 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 consiste à redimensionner dans virtualbox, puis à utiliser un utilitaire appelé gpartd pour modifier l’espace perçu par Linux dans ses partitions.

D. RECREER 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 perdez les images du menu fixe téléchargées précédemment.

docker-machine rm default

docker-machine create - pilote de la boîte virtuelle --virtualbox-disk-size "100100" par défaut

env docker-machine par défaut 

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

12
andhdo

Sur le menu fixe, osx/I a pu appuyer sur un bouton [Déplacer une image disque] Et a réussi à déplacer le Docker.qcow2 (contenant probablement des conteneurs/images) 

 enter image description here initialement - lorsque les machines ont démarré - il me restait encore un Il ne restait plus d’espace sur l’erreur de périphérique mais elle a été résolue peu de temps après.

2
johndpope

J'ai rencontré ce problème et je ne pouvais pas 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 à votre guise 

0
aabiro