Docker 启动抛出异常:设备空间不足

Error response from daemon: Cannot start container xxx: write /var/lib/docker/containers/xxxxx/hash281480960: no space left on device
Error: failed to start containers: [xxx]

1.开始排查:df -h

[root@iZbp13ks1ssZ root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 40G 0 100% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/vdb1 493G 289G 179G 62% /mnt
如图系统盘40G被占用完,基本可以确定启动异常原因和系统盘有关系

2.继续排查:docker info

查看信息,可以分析出可用磁盘容量 Data Space Available、 Metadata Space Available 仅剩 16.78 MB,所有导致没有足够的空间进行加载启动docker镜像。

docker system df #查看docker 占用空间 (注意:此操作会删除所有停止的容器)

Usage: docker system COMMAND ##使用Docker System命令,查看docker现在硬盘状态
Manage Docker
Commands:
df Show docker disk usage
events Get real time events from the server
info Display system-wide information
prune Remove unused data

3.解决办法

a.清理无效数据文件,释放磁盘空间(我这边采用的清除日志,大概35G日志)
找到容器位置,查看容器下文件夹总大小,大概34G,很明显不正常
最终定位到xxxxx-json.log文件,经 vi 查阅该日志可清除,rm 清除后 docker info

或 cd / ,在根目录下查看哪个文件夹占用内存大du -h --max-depth=1

b. 修改docker配置文件,修改data路径

关掉所有正在运行的容器
docker stop $(docker ps -q -f status=running)

关闭docker服务
systemctl stop docker

将Docker现目录挪到一个新目录下,这两个目录依照具体情况而定,我的分别是/var/lib/docker和/home/docker
mv /var/lib/docker /home/docker

将原来的数据备份一份,备份大法好,万一不行还不至于损坏数据
tar zcf docker_file_bak.tar.gz /home/docker

修改服务启动命令,服务的service文件为/lib/systemd/system/docker.service,将里面的内容ExecStart=/usr/bin/dockerd修改为如下:
ExecStart=/usr/bin/dockerd -g 新目录

重新加载修改后的service文件
systemctl daemon-reload

启动Docker服务
systemctl start docker

验证修改成功
docker info | grep “Docker Root Dir”

c. docker文件占用大,可以将docker停掉后将文件夹移动到data目录下,然后建一个超链接过去。

首先,先停掉docker服务
service docker stop

然后,将docker目录放到/data 目录下
mv /var/lib/docker /data/

然后,建立软连接
ln -s /data/docker /var/lib/docker

然后,在/var/lib/ 下输入 sudo ls -lh |grep docker , 查看文件
lrwxrwxrwx 1 root root 11 Feb 19 19:35 docker -> /data/docker

这样就可以启动docker服务了

sudo service docker start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章