Docker dice "no queda espacio en el dispositivo" pero, ¿el sistema tiene mucho espacio?


19

Estoy tratando de ejecutar una imagen de docker que funcione en otros sistemas (e incluso puede extraerla de dockerhub, si lo desea: es dougbtv/asterisk), sin embargo, en mi estación de trabajo general, se queja de espacio libre cuando se ve (parece) está desmarcando las imágenes de la ventana acoplable.

Intento ejecutarlo y, cuando lo hago, aparece un error que indica que no tiene espacio. Aquí hay un ejemplo de mí tratando de ejecutarlo, y quejándose del espacio ...

[root@localhost docker]# docker run -i -t dougbtv/asterisk /bin/bash
Timestamp: 2015-05-13 07:50:58.128736228 -0400 EDT
Code: System error

Message: [/usr/bin/tar -xf /var/lib/docker/tmp/70c178005ccd9cc5373faa8ff0ff9c7c7a4cf0284bd9f65bbbcc2c0d96e8565d410879741/_tmp.tar -C /var/lib/docker/devicemapper/mnt/70c178005ccd9cc5373faa8ff0ff9c7c7a4cf0284bd9f65bbbcc2c0d96e8565d/rootfs/tmp .] failed: /usr/bin/tar: ./asterisk/utils/astdb2sqlite3: Wrote only 512 of 10240 bytes
/usr/bin/tar: ./asterisk/utils/conf2ael.c: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/astcanary: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/.astcanary.o.d: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/check_expr.c: Cannot write: No space left on device
[... another few hundred similar lines]

Por supuesto, verifico cuánto espacio hay disponible, y al buscar en Google encuentro que a veces esto sucede porque no tienes inodos. Así que miro a ambos, y puedo ver que también hay muchos inodes.

[root@localhost docker]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G   20M  3.9G   1% /dev/shm
tmpfs                    3.9G  1.2M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/fedora-root   36G  9.4G   25G  28% /
tmpfs                    3.9G  5.2M  3.9G   1% /tmp
/dev/sda3                477M  164M  285M  37% /boot
/dev/mapper/fedora-home   18G  7.7G  8.9G  47% /home
tmpfs                    793M   40K  793M   1% /run/user/1000
/dev/sdb1                489G  225G  265G  46% /mnt/extradoze
[root@localhost docker]# df -i
Filesystem                 Inodes  IUsed     IFree IUse% Mounted on
devtmpfs                  1012063    585   1011478    1% /dev
tmpfs                     1015038     97   1014941    1% /dev/shm
tmpfs                     1015038    771   1014267    1% /run
tmpfs                     1015038     15   1015023    1% /sys/fs/cgroup
/dev/mapper/fedora-root   2392064 165351   2226713    7% /
tmpfs                     1015038    141   1014897    1% /tmp
/dev/sda3                  128016    429    127587    1% /boot
/dev/mapper/fedora-home   1166880 145777   1021103   13% /home
tmpfs                     1015038     39   1014999    1% /run/user/1000
/dev/sdb1               277252836 168000 277084836    1% /mnt/extradoze

Y así puedes ver un poco lo que está pasando aquí está mi /etc/fstab

[root@localhost docker]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Mar 17 20:11:16 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/fedora-root /                       ext4    defaults        1 1
UUID=2e2535da-907a-44ec-93d8-1baa73fb6696 /boot                   ext4    defaults        1 2
/dev/mapper/fedora-home /home                   ext4    defaults        1 2
/dev/mapper/fedora-swap swap                    swap    defaults        0 0

Y también le pregunté a alguien con una pregunta de intercambio de pila similar los resultados del lvscomando, que muestra:

[root@localhost docker]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home fedora -wi-ao---- 17.79g                                                    
  root fedora -wi-ao---- 36.45g                                                    
  swap fedora -wi-ao----  7.77g         

Es un sistema Fedora 21:

[root@localhost docker]# cat /etc/redhat-release 
Fedora release 21 (Twenty One)
[root@localhost docker]# uname -a
Linux localhost.localdomain 3.19.5-200.fc21.x86_64 #1 SMP Mon Apr 20 19:51:56 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Controlador de almacenamiento:

[doug@localhost cs]$ sudo docker info|grep Driver:
Storage Driver: devicemapper
Execution Driver: native-0.2

Versión de Docker:

[doug@localhost cs]$ sudo docker -v
Docker version 1.6.0, build 3eac457/1.6.0

Según este artículo recomendado , intenté cambiar Docker a/etc/sysconfig/docker

OPTIONS='--selinux-enabled --storage-opt dm.loopdatasize=500GB --storage-opt dm.loopmetadatasize=10GB'

Y reinició la ventana acoplable, en vano. Lo he cambiado nuevamente a solo --selinux-enabled(nota: tengo selinux deshabilitado)

Además, noté que el artículo mencionaba mirar el archivo de datos de repuesto, que se ve así:

[root@localhost doug]# ls -alhs /var/lib/docker/devicemapper/devicemapper
total 3.4G
4.0K drwx------ 2 root root 4.0K Mar 20 13:37 .
4.0K drwx------ 5 root root 4.0K Mar 20 13:39 ..
3.4G -rw------- 1 root root 100G May 13 14:33 data
9.7M -rw------- 1 root root 2.0G May 13 14:33 metadata

¿Es un problema que el archivo disperso sea más grande que el tamaño del disco?

Mi se lsblkparece a:

[root@localhost doug]# lsblk
NAME                        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                           8:0    0 111.8G  0 disk 
├─sda1                        8:1    0   100M  0 part 
├─sda2                        8:2    0  49.2G  0 part 
├─sda3                        8:3    0   500M  0 part /boot
├─sda4                        8:4    0     1K  0 part 
└─sda5                        8:5    0    62G  0 part 
  ├─fedora-swap             253:0    0   7.8G  0 lvm  [SWAP]
  ├─fedora-root             253:1    0  36.5G  0 lvm  /
  └─fedora-home             253:2    0  17.8G  0 lvm  /home
sdb                           8:16   0   1.8T  0 disk 
└─sdb1                        8:17   0   489G  0 part /mnt/extradoze
loop0                         7:0    0   100G  0 loop 
└─docker-253:1-1051064-pool 253:3    0   100G  0 dm   
loop1                         7:1    0     2G  0 loop 
└─docker-253:1-1051064-pool 253:3    0   100G  0 dm   

¿Qué controlador de almacenamiento estás usando? sudo docker info|grep Driver:
mattdm

Buena pregunta @mattdm, es devicemappercon el controlador de ejecución native-0.2. Actualicé mi pregunta con esa información y la versión de Docker.
dougBTV

¿Puedes adjuntar la salida de lsblk? Esta publicación de blog puede ayudar, aunque está un poco desactualizada.
mattdm

Fui y lo actualicé y leí la publicación del blog para ver un par de cosas, que también noté, agradezco el puntero allí @mattdm
dougBTV

Docker está extrayendo un archivo tar de / var / lib / docker / tmp / 70 ... a un directorio en / var / lib / docker / devicemapper / .... El hecho de que haya una subcadena 'devicemapper' en esa ruta me hace pensar que Docker está mapeando algún dispositivo de almacenamiento en bloque en un dispositivo de bloque específico para su uso. Esto probablemente significa que si ejecuta lsblk / df y amigos antes o después del comando docker, perderá el dispositivo asignado (¿Docker se limpia después de sí mismo?). Probablemente ctrl-z el proceso de desagregación después de que los errores comienzan a aparecer y comienzan a hurgar con las herramientas df / dm. ¿Puedes hacer eso?
Lmwangi

Respuestas:


11

Si está utilizando algún sistema operativo basado en Red-Hat, debe saber que "Devicemapper" está limitado a 10 GB por imagen, y si está tratando de ejecutar una imagen de hasta 10 GB, puede obtener ese error. Ese puede ser tu problema. Intenta esto, funcionó para mí

https://docs.docker.com/engine/reference/commandline/daemon/#storage-driver-options

 sudo systemctl stop docker.service

o

sudo service docker stop

rm -rvf /var/lib/docker (Take back up of any important data; containers and images will be deleted)

Ejecute este comando

docker daemon --storage-opt dm.basesize=20G

Donde "20G" se refiere al nuevo tamaño que desea que tome el mapeador de dispositivos y luego reinicie la ventana acoplable

sudo systemctl start docker.service

o

sudo service docker start

Compruebe si se establece ejecutando

docker info

¡Espero que esto funcione!


¡Gracias! Le daré una oportunidad más tarde. Todavía tengo esta máquina, sin embargo, ahora está bastante desactualizada, por lo que podría ser mejor actualizar a Fedora y Docker.
dougBTV

Le di una oportunidad, pero Docker se negó a comenzar después. Creo que "simplemente no use redhat" sería una solución más simple :)
samthebest

1
sudo dockerd-current --storage-opt dm.basesize=20G... eso es docker daemon => dockerd en RedHat.
mikiemorales

1
El comando docker daemon --storage-opt dm.basesize=20Gya no parece existir.
Alex

3

¿Por casualidad estás tratando de ejecutar una imagen muy grande? RHEL no tiene soporte nativo de aufs. Entonces usasdevicemapper Cuando usas devicemapper, solo tienes acceso a 10GB por defecto para tu sistema de archivos contenedor. Consulte este artículo , puede ser de ayuda.


3
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
Anthon

0

La ejecución docker system prunefuncionó durante un tiempo, luego tuve que seguir aumentando el "Tamaño de imagen de disco" en Preferencias ...> Disco, pero eso solo ayudó hasta que lo volví a aumentar.

Me niego a seguir aumentando el tamaño de la imagen del disco y docker system pruneno reclamaba más espacio, pero la ejecución docker volume pruneha ayudado esta vez.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.