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