Estoy tratando de configurar Docker Machine con Docker Compose.
Escenario 1 (sin Docker Machine)
Si ejecuto docker-compose up -d
sin 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:
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:
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 .
fuente
tmpfs
no 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.docker rmi $(docker images -f dangling=true -q)
ydocker volume rm $(docker volume ls -f dangling=true -q)
Respuestas:
Como se dijo anteriormente, el
tmpfs
no tiene nada que ver con--virtualbox-disk-size
. Parece que boot2docker se montatmpfs
en la memoria, por lo que debe dedicar más memoria a su virtualbox vm. Puede hacerlo especificando el--virtualbox-memory
parámetro.Valores predeterminados:
Con
--virtualbox-memory
conjunto a8096
fuente
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:
Comandos adicionales:
Lista de volúmenes colgantes:
Listar todos los volúmenes:
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
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ágenespuede editar el script anterior para eliminarlos o eliminarlos manualmente con
docker rmi {image-name}
fuente
docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
. La eliminación de contenedores detenidos se puede hacerdocker rm $(docker ps -qa --no-trunc --filter "status=exited")
como se describe aquí: stackoverflow.com/a/32723127/619659 .docker images | grep "^<none>" | xargs docker rmi
.docker volume prune
Si está utilizando Docker Community Edition:
Si está utilizando boot2docker (docker-machine) borre los volúmenes que quedan huérfanos:
Borrar imágenes no utilizadas:
fuente
docker system prune
me ayudódocker system prune
ftwdocker volume prune
solo para volúmenes, la poda del sistema no borrará los volúmenes colgantes.docker rmi $(docker images -q)
. Agregue--force
si es necesario cuando omita un montón de capas que se incluyen en varios contenedores.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:
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.
entonces puedes ir al cuadro virtual y ver el espacio boot2docker con el comando "df -h"
fuente
En docker osx / pude presionar un botón [ Mover imagen de disco ] y moví con éxito el Docker.qcow2 (presumiblemente conteniendo contenedores / imágenes)
Inicialmente, cuando se iniciaron las máquinas, seguía recibiendo un error No queda espacio en el dispositivo, pero se resolvió poco después.
fuente
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
fuente