dou*_*BTV 23 fedora hard-disk 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]
Run Code Online (Sandbox Code Playgroud)
当然,我会检查有多少可用空间,通过谷歌搜索,我发现有时会发生这种情况是因为您的 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
Run Code Online (Sandbox Code Playgroud)
所以你可以看到这里发生的事情是我的 /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
Run Code Online (Sandbox Code Playgroud)
而且我还问了一个有类似堆栈交换问题的人询问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
Run Code Online (Sandbox Code Playgroud)
这是一个 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
Run Code Online (Sandbox Code Playgroud)
存储驱动程序:
[doug@localhost cs]$ sudo docker info|grep Driver:
Storage Driver: devicemapper
Execution Driver: native-0.2
Run Code Online (Sandbox Code Playgroud)
码头工人版本:
[doug@localhost cs]$ sudo docker -v
Docker version 1.6.0, build 3eac457/1.6.0
Run Code Online (Sandbox Code Playgroud)
根据这篇推荐的文章,我尝试将 docker 更改为/etc/sysconfig/docker
OPTIONS='--selinux-enabled --storage-opt dm.loopdatasize=500GB --storage-opt dm.loopmetadatasize=10GB'
Run Code Online (Sandbox Code Playgroud)
并重新启动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
Run Code Online (Sandbox Code Playgroud)
稀疏文件大于磁盘大小是不是有问题?
我的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
Run Code Online (Sandbox Code Playgroud)
小智 16
如果您使用任何基于 Red-Hat 的操作系统,您应该知道“Devicemapper”限制为每个映像 10 GB,如果您尝试运行最大 10 GB 的映像,您可能会收到该错误。那可能是你的问题。试试这个,它对我有用
https://docs.docker.com/engine/reference/commandline/daemon/#storage-driver-options
sudo systemctl stop docker.service
Run Code Online (Sandbox Code Playgroud)
或者
sudo service docker stop
rm -rvf /var/lib/docker (Take back up of any important data; containers and images will be deleted)
Run Code Online (Sandbox Code Playgroud)
运行这个命令
docker daemon --storage-opt dm.basesize=20G
Run Code Online (Sandbox Code Playgroud)
其中“20G”是指您希望devicemapper采用的新大小,然后重新启动docker
sudo systemctl start docker.service
Run Code Online (Sandbox Code Playgroud)
或者
sudo service docker start
Run Code Online (Sandbox Code Playgroud)
检查它是否通过运行设置
docker info
Run Code Online (Sandbox Code Playgroud)
希望这有效!