Docker Machine: no queda espacio en el dispositivo

126

Estoy tratando de configurar Docker Machine con Docker Compose.

Escenario 1 (sin Docker Machine)
Si ejecuto docker-compose up -dsin Docker Machine, crea mis 3 contenedores vinculados como intencionado (nginx + mongodb + nodejs).

Escenario 2 (con Docker Machine)
Luego creo una VM usando Docker Machine y le digo a Docker que hable con esa máquina eval $(docker-machine env streambacker-dev).

En este punto, si me dirijo a mi máquina acoplable y ejecuto df -h, obtengo:

máquina acoplable df -h

Si luego ejecuto docker-compose up -d, aparece el error "no queda espacio en el dispositivo" mientras descargo el último contenedor.

"tmpfs" parece estar un poco lleno después de eso:

máquina acoplable df -h

Marcar la opción --virtualbox-disk-size muestra que el valor predeterminado es 20000 MB, que creo que es lo que podemos ver como "/ dev / sda1" en ambas imágenes. Entonces, ¿por qué los contenedores están llenando "tmpfs" ny qué es exactamente "tmpfs"? ¿Es un directorio de descarga temporal? ¿Cómo puedo crear más espacio para mis contenedores?

¡Gracias!

Para información, estoy usando Docker Machine 0.4.0-rc2 y Docker Compose 1.3.2 .

Marc Perrin-Pelletier
fuente
44
El tmpfsno tiene nada que ver con --virtualbox-disk-size. Es un sistema de archivos (como un disco RAM) montado en la memoria y nada está accediendo a su disco.
0x7d7b
Gracias @ h3nrik por esa información.
Marc Perrin-Pelletier
2
verifique con las cosas colgantes de la ventana acoplable, como imágenes colgantes, volúmenes colgantes y elimínelos. docker rmi $(docker images -f dangling=true -q)ydocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Respuestas:

87

Como se dijo anteriormente, el tmpfsno tiene nada que ver con --virtualbox-disk-size. Parece que boot2docker se monta tmpfsen la memoria, por lo que debe dedicar más memoria a su virtualbox vm. Puede hacerlo especificando el --virtualbox-memoryparámetro.

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

Valores predeterminados:

$ 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-memoryconjunto a8096

$ 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
fuente
14
No es muy intuitivo, pero esto funcionó. ¿Qué diablos, Docker?
BastiBen
1
¡No intuitivo de hecho! Sin embargo, este parece ser el problema con esto y lo arregló para mí. Entonces, +1.
Ray Pendergraph
También me solucionó el problema, no entiendo cómo, pero ¡gracias!
Bendihossan
¿Hay alguna forma de aumentar el tamaño predeterminado para que no tenga que especificarlo manualmente cada vez?
CGFoX
124

Tuve el mismo error ( [ERROR] InnoDB: Error number 28 means 'No space left on device') y lo solucioné de esta manera:

1) Elimine los volúmenes huérfanos en Docker, puede usar el comando incorporado de volumen docker. El comando incorporado también elimina cualquier directorio en / var / lib / docker / volume que no sea un volumen, así que asegúrese de no poner nada allí que desee guardar.

Advertencia, tenga mucho cuidado con esto si tiene algunos datos que desea conservar

Limpiar:

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

Comandos adicionales:

Lista de volúmenes colgantes:

$ docker volume ls -qf dangling=true

Listar todos los volúmenes:

$ docker volume ls

2) También considere eliminar todas las imágenes no utilizadas.

Primero, elimine las <none>imágenes (a veces se generan mientras se construye una imagen y si por alguna razón la construcción de la imagen se interrumpió, permanecen allí).

aquí hay un buen script que uso para eliminarlos

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

Luego, si está utilizando Docker Compose para crear imágenes localmente para cada proyecto. Terminará con muchas imágenes generalmente nombradas como su carpeta (por ejemplo, si la carpeta de su proyecto llamada Hola, encontrará el nombre de las imágenes Hello_blablabla). así que también considera eliminar todas estas imágenes

puede editar el script anterior para eliminarlos o eliminarlos manualmente con

docker rmi {image-name}

Mahmoud Zalt
fuente
3
En Mac que tenía que usar comillas simples ( ') en torno a los valores de los argumentos: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). La eliminación de contenedores detenidos se puede hacer docker rm $(docker ps -qa --no-trunc --filter "status=exited")como se describe aquí: stackoverflow.com/a/32723127/619659 .
Webdevotion
1
Tenía tantas imágenes sin usar que alcancé el límite de caracteres de mi caparazón. Por eso lo hice docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun
1
Eliminar imágenes innecesarias me ayudó.
akauppi
docker volume prune
justin
.. vea mi descripción paso a paso para cambiar el tamaño de / var / lib / docker usando resize2fs en otro hilo: stackoverflow.com/questions/32485723/…
Alex
65

Si está utilizando Docker Community Edition:

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

Si está utilizando boot2docker (docker-machine) borre los volúmenes que quedan huérfanos:

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

Borrar imágenes no utilizadas:

 docker rmi $(docker images -q -f "dangling=true")
Alex Efimov
fuente
66
docker system pruneme ayudó
Maxim Yefremov
2
docker system pruneftw
Michael Guild
1
docker volume prunesolo para volúmenes, la poda del sistema no borrará los volúmenes colgantes.
justin.m.comprar el
Cuando lo anterior no le despejar el espacio suficiente, aquí está la opción nuclear: docker rmi $(docker images -q). Agregue --forcesi es necesario cuando omita un montón de capas que se incluyen en varios contenedores.
EmptyArsenal
14

A. RETIRE IMÁGENES NO USADAS

Con los comandos docker rm o docker rmi puede eliminar las imágenes que no necesita. En realidad, existe una imagen que ayuda en esta tarea (martin / docker-cleanup-volume). La base es comenzar a seleccionar desde su lista de imágenes y contenedores:

docker ps -a -s

B. MODIFICAR EL DESCRIPTOR DE DOCKER JSON

Se menciona en algunos foros. La idea es incrementar el descriptor ubicado en ~ / .docker / machine / machines / default / config.json. El parámetro parece ser DiskSize pero no sé si funciona en otros sistemas operativos (no en Windows).

C. TAMAÑO DE LINUX:

en el sistema operativo Windows, la máquina docker o boot2docker es de hecho una virtualbox vm, entonces puede seguir el procedimiento para cambiar el tamaño del disco. Tenga cuidado de hacer una copia de seguridad de los archivos. El procedimiento general es hacer un cambio de tamaño en virtualbox y luego usar un utilitario llamado gpartd para modificar el espacio percibido por Linux en sus particiones. Hay algunos enlaces para hacer este procedimiento al que se hace referencia a continuación:

D. RECREA LA MÁQUINA DOCKER / BOOT2DOCKER

La idea es recrear la máquina acoplable predeterminada. Los siguientes comandos pueden ilustrarlo. Tenga en cuenta que al volver a crear boot2docker, perderá las imágenes de docker descargadas anteriormente.

docker-machine rm default

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

docker-machine env por defecto

entonces puedes ir al cuadro virtual y ver el espacio boot2docker con el comando "df -h"

andhdo
fuente
Gracias. Estaba trabajando en Windows. Lo hice recreando la máquina acoplable.
KinoP
Ayudó a la D: (recreando la máquina acoplable)
StanislavL
Gracias, recrear la máquina acoplable funcionó para mí (estoy en Windows)
Lucha Laura Hardie
¡Siento mucho amor!
eduyayo
2

En docker osx / pude presionar un botón [ Mover imagen de disco ] y moví con éxito el Docker.qcow2 (presumiblemente conteniendo contenedores / imágenes)

ingrese la descripción de la imagen aquí Inicialmente, cuando se iniciaron las máquinas, seguía recibiendo un error No queda espacio en el dispositivo, pero se resolvió poco después.

johndpope
fuente
0

Me encontré con este problema y no pude agregar espacio adicional con la interfaz de usuario de Docker para Mac, instalé Docker con homebrew y ejecuté el siguiente comando al crear mi máquina:

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

esto agrega el doble de espacio para memoria y tamaño de disco a la caja virtual que tenía antes y puede agregar el tamaño de configuración aquí que necesita según lo considere conveniente

aabiro
fuente