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

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

我正在尝试运行一个可在其他系统上运行的 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。

[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

码头工人版本:

[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   

答案1

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

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”是指您希望devicemapper采用的新大小,然后重新启动docker

sudo systemctl start docker.service

或者

sudo service docker start

通过运行检查是否已设置

docker info

希望这有效!

答案2

您是否有机会尝试运行非常大的图像? RHEL 没有 aufs 本机支持。因此,devicemapper 当您使用 时devicemapper,默认情况下您只能访问容器文件系统的 10GB。查看本文,可能会有帮助。

答案3

运行docker system df看看磁盘使用情况来自哪里。就我而言,构建缓存超出了我分配的 128GB 磁盘空间。我尝试了各种.. prune命令和标志,但它们都错过了清除缓存的机会。

要清除构建缓存,请运行docker builder prune.这将我的缓存磁盘空间使用量降至 0。下一个构建花费了更长的时间,因为它必须下载 10GB+。之后它再次使用缓存。

答案4

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

我拒绝继续增加磁盘映像大小,也docker system prune没有占用更多空间,但docker volume prune这次运行有所帮助。

相关内容