Docker说“设备上没有剩余空间”,但是系统有足够的空间吗?


19

我正在尝试运行可在其他系统上使用的docker映像(如果愿意,您甚至可以从dockerhub提取它dougbtv/asterisk),但是,在我的普通工作站上,它在抱怨可用空间(看起来像)它可以使Docker映像脱机。

我尝试运行它,当我这样做时,我收到一条错误消息,指出它空间不足。这是我尝试运行它的示例,它抱怨空间。

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

当然,我检查了可用空间,并且通过谷歌搜索发现有时这种情况发生是因为您没有inode。因此,我对两者进行了研究,并且我发现也有很多inode。

[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

这样您就可以看到发生了什么,这是我的 /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

我还问了一个有类似堆栈交换问题的人,询问lvs命令的结果,该命令显示:

[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         

这是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

存储驱动程序:

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

Docker版本:

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

根据这篇推荐文章,我尝试将docker更改为/etc/sysconfig/docker

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

并重新启动了docker,但无济于事。我将其更改回了刚刚--selinux-enabled(注意:我禁用了selinux)

另外,我注意到该文章提到了查看备用数据文件,该文件看起来像:

[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

稀疏文件大于磁盘大小是否有问题?

我的lsblk样子是:

[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   

您正在使用什么存储驱动程序?sudo docker info|grep Driver:
mattdm 2015年

好问题@mattdm,devicemapper与执行驱动程序一起使用native-0.2。我用该信息和docker版本更新了我的问题。
dougBTV

您可以附加的输出lsblk吗?这篇博客文章可能会有所帮助,尽管有些过时了。
mattdm 2015年

我去更新了它并浏览了博客文章,以结帐了几件事,我也注意到了,这里的指针非常感谢@mattdm
dougBTV 2015年

Docker正在将tar文件从/ var / lib / docker / tmp / 70 ....提取到/ var / lib / docker / devicemapper / ....下的目录中。在该路径中存在子字符串'devicemapper'的事实让我认为docker正在将某些块存储设备映射到特定于docker的块设备以供使用。这可能意味着,如果在docker命令之前或之后运行lsblk / df和friends,您将错过映射的设备(docker会在其自身清理后清理吗?)。错误开始弹出并开始使用df / dm工具戳后,我可能会按ctrl-z进行取消捆绑的过程。你能做到吗?
Lmwangi 2015年

Answers:


11

如果您使用任何基于Red-Hat的操作系统,则应该知道“ Devicemapper”每个映像的大小限制为10 GB,并且如果您尝试运行的映像最大为10GB,则可能会出现该错误。那可能是你的问题。试试这个,对我有用

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

 sudo systemctl stop docker.service

要么

sudo service docker stop

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

运行此命令

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

其中“ 20G”是指您希望设备映射器采用的新大小,然后重新启动docker

sudo systemctl start docker.service

要么

sudo service docker start

检查是否通过运行设置

docker info

希望这有效!


谢谢!我稍后再试一下。我仍然有这台机器,但是,它现在已经过时了,所以我应该更新到最新的Fedora和Docker。
dougBTV

我同意了,但是docker之后拒绝启动。我认为“只是不使用redhat”将是一个更简单的解决方案:)
samthebest

1
sudo dockerd-current --storage-opt dm.basesize=20G...这是RedHat中的docker daemon => dockerd。
mikiemorales

1
该命令docker daemon --storage-opt dm.basesize=20G似乎不再存在。
Alex

3

您是否有机会尝试放大图像?RHEL没有aufs本机支持。因此,您可以使用使用devicemapperdevicemapper,默认情况下,您的容器文件系统只能访问10GB。检查本文,可能会有帮助。


3
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
Anthon

0

运行docker system prune了一段时间后,我不得不继续在“首选项...”>“磁盘”中增加“磁盘映像大小”,但这只有在我再次增加它的情况下才起作用。

我拒绝继续增加磁盘映像的大小,并且docker system prune没有要求更多空间,但是docker volume prune这次运行有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.