记录一次docker文件夹占满文件系统的排查过程

故障现象

早晨起来发现gitlab上的一些CICD流程运行失败了。因为未改动CICD脚本,故怀疑是runner机器故障。

关键步骤

登录机器检查磁盘占用

-h``` 直接确认根目录已经100%占用了,故确定是磁盘满了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#### 检查docker情况
因为对docker的磁盘占用有一些预期,所以直接检查docker是否镜像占用过多。
```docker image prune```
先尝试用上面最温柔的方式清理一些数据,然后```df -h```检查磁盘空间占用变少,重新尝试在gitlab上运行流水线成功,确认磁盘问题。

#### 磁盘占用情况
```bash
[root@TJnetwork ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 7.6G 0 7.6G 0% /dev/shm
tmpfs 3.1G 297M 2.8G 10% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/mapper/openeuler-root 63G 36G 24G 61% /
tmpfs 7.6G 0 7.6G 0% /tmp
/dev/sda2 974M 138M 770M 16% /boot
/dev/sda1 599M 6.2M 593M 2% /boot/efi
/dev/mapper/openeuler-home 31G 414M 29G 2% /home
/dev/sdb 1007G 124G 832G 13% /data

上面是当时的截图。根目录占用很高,data目录占用很低,所以尝试把docker的根目录迁移到/data目录下。

docker配置的更改

保证目标文件夹有权限,我直接使用777权限。 如果文件夹权限不对docker进程会启动失败。
docker的配置文件一般在/etc/docker/daemon.json

1
2
3
4
5
[root@TJnetwork lib]# cat /etc/docker/daemon.json
{
"data-root": "/data/docker-data",
"registry-mirrors" : [ "https://dockerpull.com", "https://register.liberx.info", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://dockerhub1.beget.com", "https://noohub.ru" ]
}

核心就是data-root的目录,重启之后数据都存在/data/docker-data上了。

后续核心命令

现在虽然硬盘加到1T,但是早晚也会满,弄一个计划任务,每天运行一次docker的清理命令。

1
docker image prune -a --filter "until=720h"

使用linux下常用的定时命令
crontab -e
加入如下规则,每天运行一次docker镜像清理命令
0 0 * * * docker image prune -a --filter "until=720h"