Docker mengatakan "tidak ada ruang yang tersisa di perangkat" tetapi, sistem memiliki banyak ruang?

19

Saya mencoba menjalankan gambar buruh pelabuhan yang bekerja pada sistem lain (dan Anda bahkan dapat menariknya dari dockerhub, jika Anda mau: itu dougbtv/asterisk) namun, di workstation umum saya, mengeluh tentang ruang kosong ketika (sepertinya) itu untarring gambar buruh pelabuhan.

Saya mencoba menjalankannya, dan ketika saya melakukannya saya mendapatkan kesalahan yang menyatakan bahwa itu di luar ruang. Inilah contoh saya mencoba menjalankannya, dan mengeluh tentang ruang ..

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

Tentu saja, saya memeriksa berapa banyak ruang yang tersedia, dan melalui googling saya menemukan bahwa kadang-kadang ini terjadi karena Anda kehabisan inode. Jadi saya melihat keduanya, dan saya dapat melihat bahwa ada banyak inode juga.

[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

Dan Anda dapat melihat sedikit apa yang terjadi di sini adalah milik saya /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

Dan saya juga bertanya kepada seseorang dengan pertanyaan pertukaran tumpukan serupa yang meminta hasil dari lvsperintah, yang menunjukkan:

[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         

Ini adalah sistem 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

Driver penyimpanan:

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

Versi buruh pelabuhan:

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

Per artikel yang direkomendasikan ini saya mencoba untuk mengubah buruh pelabuhan/etc/sysconfig/docker

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

Dan buruh pelabuhan kembali, tidak berhasil. Saya telah mengubahnya kembali menjadi adil --selinux-enabled(catatan: Saya telah menonaktifkan selinux)

Selain itu saya perhatikan bahwa artikel tersebut menyebutkan melihat file data cadangan, yang terlihat seperti:

[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

Apakah masalah bahwa file jarang lebih besar dari ukuran disk?

lsblkPenampilan saya seperti:

[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
sumber
Driver penyimpanan apa yang Anda gunakan? sudo docker info|grep Driver:
mattdm
Pertanyaan bagus @mattdm, ada di devicemapperdriver eksekusi native-0.2. Saya memperbarui pertanyaan saya dengan info itu dan versi buruh pelabuhan.
dougBTV
dapatkah Anda melampirkan output lsblk? Posting blog ini mungkin membantu, walaupun agak ketinggalan zaman.
mattdm
Aku pergi dan memperbaruinya dan berjalan melalui posting blog untuk checkout beberapa hal, yang saya juga perhatikan, menghargai pointer di sana @mattdm
dougBTV
Docker mengekstraksi file tar dari / var / lib / docker / tmp / 70 .... ke direktori di bawah / var / lib / docker / devicemapper / .... Fakta bahwa ada substring 'devicemapper' di jalur itu membuat saya berpikir bahwa buruh pelabuhan memetakan beberapa perangkat penyimpanan blok menjadi perangkat khusus pembuat pelabuhan untuk digunakan. Ini mungkin berarti bahwa jika Anda menjalankan lsblk / df dan teman-teman sebelum atau setelah perintah buruh pelabuhan, Anda akan kehilangan perangkat yang dipetakan (buruh pelabuhan membersihkan sendiri?). Saya mungkin ctrl-z proses unbundling setelah kesalahan mulai muncul dan mulai menyodok dengan alat df / dm. Bisakah Anda melakukan itu?
Lmwangi

Jawaban:

11

Jika Anda menggunakan sistem operasi berbasis Red-Hat, Anda harus tahu bahwa "Devicemapper" terbatas pada 10 GB per gambar, dan jika Anda mencoba menjalankan gambar yang hingga 10GB Anda mungkin mendapatkan kesalahan itu. Itu mungkin masalah Anda. Coba ini, itu berhasil untuk saya

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

 sudo systemctl stop docker.service

atau

sudo service docker stop

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

Jalankan perintah ini

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

Di mana "20G" mengacu pada ukuran baru yang Anda ingin ambil oleh devicemapper, dan kemudian, restart buruh pelabuhan

sudo systemctl start docker.service

atau

sudo service docker start

Periksa apakah sudah diatur dengan menjalankan

docker info

Semoga ini berhasil!

RIcardo
sumber
Terima kasih! Saya akan mencoba ini nanti. Saya masih memiliki mesin ini, namun sekarang sudah ketinggalan zaman, jadi mungkin perlu saya perbarui ke Fedora & Docker terbaru.
dougBTV
Saya mencoba ini, tetapi buruh pelabuhan menolak untuk memulai setelah itu. Saya pikir "jangan gunakan redhat" akan menjadi solusi yang lebih sederhana :)
samthebest
1
sudo dockerd-current --storage-opt dm.basesize=20G... itu adalah docker daemon => dockerd di RedHat.
mikiemorales
1
Perintah docker daemon --storage-opt dm.basesize=20Gitu sepertinya tidak ada lagi.
Alex
3

Apakah Anda kebetulan mencoba menjalankan gambar yang sangat besar? RHEL tidak memiliki dukungan asli aufs. Jadi Anda menggunakan devicemapper Saat Anda menggunakan devicemapper, Anda hanya memiliki akses ke 10GB secara default untuk sistem file wadah Anda. Lihat artikel ini , mungkin bisa membantu.

Aymeric
sumber
3
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Anthon
0

Menjalankan docker system prunebekerja sebentar, maka saya harus terus meningkatkan "ukuran gambar Disk" di Preferensi ...> Disk, tetapi itu hanya membantu sampai saya meningkatkannya lagi.

Saya menolak untuk terus meningkatkan ukuran gambar disk dan docker system prunetidak mengklaim ruang lagi, tetapi menjalankan docker volume prunetelah membantu saat ini.

Program AV
sumber