Docker mówi „brak miejsca na urządzeniu”, ale czy system ma dużo miejsca?

19

Próbuję uruchomić obraz dokera, który działa na innych systemach (a nawet możesz pobrać go z dockerhub, jeśli chcesz: to dougbtv/asterisk), jednak na mojej ogólnej stacji roboczej narzeka na wolne miejsce, gdy (wygląda) rozpakowuje obrazy dokerów.

Próbuję go uruchomić, a kiedy to robię, pojawia się błąd informujący, że brakuje miejsca. Oto przykład mojej próby uruchomienia i narzeka na przestrzeń ...

[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]

Oczywiście sprawdzam, ile miejsca jest dostępne i po googlowaniu okazuje się, że czasami tak się dzieje, ponieważ brakuje Ci i-węzłów. Spoglądam więc na oba i widzę, że jest też mnóstwo i-węzłów.

[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

Abyś mógł zobaczyć, co się tutaj dzieje, jest moje /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

I zadałem też pytanie o wyniki wymiany stosu lvs polecenia, które pokazuje:

[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         

Jest to system 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

Sterownik pamięci:

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

Wersja Docker:

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

W tym zalecanym artykule próbowałem zmienić okno dokowane na/etc/sysconfig/docker

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

I ponownie uruchomiłem dokera, ale bezskutecznie. Zmieniłem to z powrotem na tylko --selinux-enabled(uwaga: mam wyłączony selinux)

Dodatkowo zauważyłem, że w artykule wspomniano o przejrzeniu zapasowego pliku danych, który wygląda następująco:

[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

Czy problemem jest to, że rzadki plik jest większy niż rozmiar dysku?

Mój lsblkwygląda jak:

[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   
dougBTV
źródło
Jakiego sterownika magazynu używasz? sudo docker info|grep Driver:
mattdm
Dobre pytanie @mattdm, to devicemapperze sterownikiem wykonania native-0.2. Zaktualizowałem swoje pytanie o te informacje i wersję dokera.
dougBTV
czy możesz dołączyć wyjście lsblk? Ten post na blogu może pomóc, choć jest trochę nieaktualny.
mattdm
Poszedłem i zaktualizowałem go i przeszedłem przez post na blogu, aby sprawdzić kilka rzeczy, które również zauważyłem, doceniam wskaźnik tam @mattdm
dougBTV
Docker rozpakowuje plik tar z / var / lib / docker / tmp / 70 .... do katalogu w katalogu / var / lib / docker / devicemapper / .... Fakt, że w tej ścieżce znajduje się podciąg „devicemapper” sprawia, że ​​myślę, że doker mapuje jakieś blokowe urządzenie magazynujące na urządzenie blokowe specyficzne dla dokera do użycia. Prawdopodobnie oznacza to, że jeśli uruchomisz lsblk / df i znajomych przed lub po poleceniu dokera, przegapisz zmapowane urządzenie (doker czyści po sobie?). Prawdopodobnie ctrl-z procesu unbundlingu po tym, jak błędy zaczną wyskakiwać i zacznę grzebać w narzędziach df / dm. Możesz to zrobić?
Lmwangi

Odpowiedzi:

11

Jeśli używasz dowolnego systemu operacyjnego opartego na systemie Red-Hat, powinieneś wiedzieć, że „Devicemapper” jest ograniczony do 10 GB na obraz, a jeśli próbujesz uruchomić obraz o wielkości do 10 GB, możesz otrzymać ten błąd. To może być twój problem. Spróbuj, to zadziałało dla mnie

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

 sudo systemctl stop docker.service

lub

sudo service docker stop

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

Uruchom to polecenie

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

Gdzie „20G” odnosi się do nowego rozmiaru, który ma wziąć devicemapper, a następnie zrestartuj okno dokowane

sudo systemctl start docker.service

lub

sudo service docker start

Sprawdź, czy jest ustawiony, uruchamiając

docker info

Mam nadzieję, że to działa!

RIcardo
źródło
Dziękuję Ci! Spróbuję to później. Nadal mam tę maszynę, jednak jest ona dość przestarzała, więc może mi się przydać aktualizacja do najnowszej wersji Fedory i Dockera.
dougBTV,
Próbowałem, ale doker odmówił późniejszego uruchomienia. Myślę, że „po prostu nie używaj redhat” byłoby prostszym rozwiązaniem :)
samthebest
1
sudo dockerd-current --storage-opt dm.basesize=20G... to jest docker daemon => dockerd w RedHat.
mikiemorales
1
Wydaje się, że polecenie docker daemon --storage-opt dm.basesize=20Gjuż nie istnieje.
Alex
3

Czy przypadkiem próbujesz uruchomić bardzo duży obraz? RHEL nie ma natywnej obsługi aufs. Więc używasz devicemapper Kiedy używasz devicemapper, domyślnie masz dostęp tylko do 10 GB dla systemu plików kontenera. Sprawdź ten artykuł , może być pomocny.

Aymeric
źródło
3
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Anthon
0

Bieganie docker system prunedziałało przez jakiś czas, potem musiałem ciągle zwiększać „Rozmiar obrazu dysku” w Preferencjach ...> Dysk, ale to pomogło tylko do momentu, gdy zwiększyłem go ponownie.

Odmawiam dalszego zwiększania rozmiaru obrazu dysku i docker system prunenie żądam już więcej miejsca, ale docker volume prunetym razem pomogło mi uruchomienie.

AVProgrammer
źródło