docker“nospaceleftondevice”问题定位解决
约瑟翰 庞麦郎在paas环境上使⽤docker加载镜像的时候出现了如下问题
第⼀反应应该是存储镜像的路径磁盘满了
docker info查看docker的根路径,可以看到为/opt/docker:
习惯说查看/opt/docker的磁盘占⽤率:
从上述可知docker的磁盘并没有占⽤满,怀疑是inode占⽤满导致的,查看/opt的inode占⽤率,发现inode⽤尽
删除/opt占⽤过多的⽂件或⽬录即可,本问题是因为程序错误,导致在pod的kubernetes.io~secret下⾯创建了195w多个空⽬录,导致inode 被占⽤完
注:
这世界需要你使⽤ls -lR DIR_NAME | grep "^-"|wc -l可以查看⽬录DIR_NAME中的⽂件数
使⽤ls -lR DIR_NAME | grep "^d"|wc -l可以查看⽬录DIR_NAME中的⽬录数
在docker中有⼀个重要的存储器,以centos系统为例,使⽤docker info可以看到docker的存储系统类型为devicemapper,docker使⽤thinpool特性来存储容器镜像。
也可以通过/etc/docker/daemon.json查看docker的存储设备:
可以在/dev/mapper中查看挂载的实际设备夏川りみ
/var/lib/docker/devicemapper/metadata/包含了devicemapper本⾝配置以及镜像和容器层相关的信息,格式为json。
/var/lib/devicemapper/mnt/包含了容器和镜像挂载的点(可以使⽤lsblk查看),镜像挂载点为空,容器则包含了容器中的⽂件系统
使⽤lvs -a可以查看当前存储设备的使⽤情况:爱与不爱都是伤害
平安中国好声音洋葱使⽤lsblk可以查看当前设备的使⽤情况(可以使⽤vgdisplay --verbose来查看vg对应的lv设备):
参考: