Docker Machine: nessuno spazio sul dispositivo


126

Sto cercando di installare Docker Machine con Docker Compose.

Scenario 1 (senza Docker Machine)
Se corro docker-compose up -dsenza Docker Machine, crea i miei 3 contenitori collegati come previsto (nginx + mongodb + nodejs).

Scenario 2 (con Docker Machine)
Quindi creo una macchina virtuale usando Docker Machine e dico a Docker di parlare con quella macchina eval $(docker-machine env streambacker-dev).

A questo punto, se scendo sulla mia macchina docker ed eseguo df -h, ottengo:

macchina docker df -h

Se quindi eseguo docker-compose up -d, visualizzo un errore "spazio vuoto sul dispositivo" durante il download dell'ultimo contenitore.

"tmpfs" sembra essere davvero un po 'pieno dopo quello:

macchina docker df -h

Il controllo dell'opzione --virtualbox-disk-size mostra che il valore predefinito è 20000 MB, che credo sia quello che possiamo vedere come "/ dev / sda1" su entrambe le immagini. Allora perché i contenitori riempiono "tmpfs" n e che cosa è esattamente "tmpfs"? È una directory di download temporanea? Come posso creare più spazio per i miei contenitori?

Grazie!

Per informazioni, sto usando Docker Machine 0.4.0-rc2 e Docker Compose 1.3.2 .


4
L' tmpfsha nulla a che fare con --virtualbox-disk-size. È un filesystem (come un disco RAM) montato in memoria e nulla accede al tuo disco.
0x7d7b

Grazie @ h3nrik per queste informazioni.
Marc Perrin-Pelletier,

2
verificare con le cose penzolanti della finestra mobile, come immagini penzolanti, volumi penzolanti ed eliminarle. docker rmi $(docker images -f dangling=true -q)edocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu l'

Risposte:


87

Come detto sopra, tmpfsnon ha nulla a che fare con --virtualbox-disk-size. Sembra che boot2docker si monti tmpfsnella memoria, quindi devi dedicare più memoria alla tua virtualbox vm. Puoi farlo specificando il --virtualbox-memoryparametro.

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

Con --virtualbox-memoryimpostato su8096

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

14
Non molto intuitivo, ma ha funzionato. Che diamine, Docker?
BastiBen,

1
Davvero non intuitivo! Tuttavia, questo sembra essere il problema con questo e risolto il problema per me. Quindi, +1.
Ray Pendergraph,

Risolto il problema anche per me, non capisco come, ma grazie!
Bendihossan,

Qualche modo per aumentare le dimensioni predefinite in modo da non doverle specificare manualmente ogni volta?
CGFoX,

124

Ho avuto lo stesso errore ( [ERROR] InnoDB: Error number 28 means 'No space left on device') e risolverlo in questo modo:

1 Eliminare i volumi orfani in Docker, è possibile utilizzare il comando volume docker incorporato. Il comando integrato elimina anche qualsiasi directory in / var / lib / docker / volumi che non sia un volume, quindi assicurati di non aver inserito nulla che desideri salvare.

Attenzione stai molto attento con questo se hai dei dati che vuoi conservare

Pulire:

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

Comandi aggiuntivi:

Elenco dei volumi sospesi:

$ docker volume ls -qf dangling=true

Elenca tutti i volumi:

$ docker volume ls

2 Prendi anche in considerazione la rimozione di tutte le immagini non utilizzate.

Per prima cosa sbarazzarsi delle <none>immagini (a volte vengono generate durante la costruzione di un'immagine e se per qualsiasi motivo la costruzione dell'immagine è stata interrotta, rimangono lì).

ecco una bella sceneggiatura che uso per rimuoverli

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

Quindi se stai usando Docker Compose per creare immagini localmente per ogni progetto. Ti ritroverai con molte immagini di solito chiamate come la tua cartella (esempio se la cartella del tuo progetto è Hello, troverai il nome delle immagini Hello_blablabla). quindi considera anche di rimuovere tutte queste immagini

puoi modificare lo script sopra per rimuoverli o rimuoverli manualmente con

docker rmi {image-name}


3
Su Mac ho dovuto utilizzare le virgolette singole ( ') attorno i valori degli argomenti: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). La rimozione dei contenitori interrotti può essere eseguita docker rm $(docker ps -qa --no-trunc --filter "status=exited")come descritto qui: stackoverflow.com/a/32723127/619659 .
Webdevotion

1
Avevo così tante immagini inutilizzate, ho raggiunto il limite del personaggio della mia shell. Ecco perché l'ho fatto docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun,

1
La rimozione di immagini non necessarie mi ha aiutato.
akauppi il

docker volume prune
justin.m.chase

.. vedi la mia descrizione dettagliata per ridimensionare / var / lib / docker usando resize2fs in un altro thread: stackoverflow.com/questions/32485723/…
Alex

65

Se si utilizza Docker Community Edition:

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

Se stai usando boot2docker (docker-machine) cancella i volumi che sono rimasti orfani:

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

Cancella immagini inutilizzate:

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

6
docker system prunemi ha aiutato
Maxim Yefremov,

2
docker system pruneftw
Michael Guild,

1
docker volume pruneper soli volumi, la prugna di sistema non cancella i volumi sospesi.
justin.m.chase

Quando il sopra non ti cancella spazio sufficiente, ecco l'opzione nucleare: docker rmi $(docker images -q). Aggiungi --forcese è necessario quando salta un mucchio di livelli inclusi in più contenitori.
EmptyArsenal

14

A. RIMUOVI IMMAGINI NON UTILIZZATE

utilizzando i comandi docker rm o docker rmi è possibile rimuovere le immagini non necessarie. In realtà esiste un'immagine che aiuta in questo compito (martin / docker-cleanup-volume). La base è iniziare la selezione dall'elenco delle immagini e dei contenitori:

finestra mobile ps -a -s

B. MODIFICARE IL DESCRITTORE JSON DOCKER

è menzionato in alcuni forum. L'idea è di incrementare il descrittore situato in ~ / .docker / machine / machines / default / config.json. Il parametro sembra essere DiskSize ma non so se funziona in altri sistemi operativi (non in Windows).

C. LINUX RESIZE:

nel sistema operativo Windows, la docker machine o boot2docker è in realtà una virtualbox vm, quindi è possibile seguire la procedura per ridimensionare il disco. Fare attenzione a eseguire il backup dei file. La procedura generale è fare un ridimensionamento in virtualbox e quindi usare un utilitario chiamato gpartd per modificare lo spazio percepito da Linux nelle sue partizioni. Esistono alcuni collegamenti per eseguire questa procedura di seguito indicata:

D. RICREARE IL DOCKER-MACHINE / BOOT2DOCKER

L'idea è ricreare la finestra mobile predefinita. I seguenti comandi possono illustrarti. Si noti che mentre si ricrea il boot2docker, si perderanno le precedenti immagini della finestra mobile scaricate.

docker-machine rm default

docker-machine create --driver virtualbox --virtualbox-disk-size "100100" predefinito

docker-machine env default

quindi puoi andare nella casella virtuale e vedere lo spazio boot2docker con il comando "df -h"


Grazie. Stavo lavorando su Windows. L'ho fatto ricreando la docker-machine.
KinoP,

Aiutò il D: (ricreando la docker machine)
StanislavL

Grazie, ricreando la docker-machine ha funzionato per me (sono su Windows)
Lucha Laura Hardie,

Sento tanto amore!
eduyayo,

2

Sulla docker osx / I è stato in grado di premere un pulsante [ Sposta immagine disco ] e ha spostato correttamente Docker.qcow2 (presumibilmente contenente contenitori / immagini)

inserisci qui la descrizione dell'immagine inizialmente - quando le macchine sono state avviate - continuavo a ricevere lo spazio No sull'errore del dispositivo, ma si è risolto poco dopo.


0

Ho riscontrato questo problema e non ho potuto aggiungere ulteriore spazio con l'interfaccia utente della finestra mobile per mac, ho installato la finestra mobile con homebrew ed eseguito il comando seguente durante la creazione della mia macchina:

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

questo aggiunge il doppio dello spazio per la memoria e le dimensioni del disco alla virtualbox che avevo prima e puoi aggiungere qui le dimensioni delle impostazioni che ti servono come ritieni opportuno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.