1.使用指令查看系统空间使用情况

df -h

c0d97b18aa114da5b10981bd3e3ac4b6~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp
可以看到,40GB的空间已经被使用了36G了,就剩下2.2G,根本没法使用。

2.使用指令查看docker占用空间
docker system df
ccc4eee046014362bc2a093de1590b21~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

可以看到,docker占用的空间也不大,合起来都没有2G
3.再次使用指令查看具体的占用情况
docker system df -v
bf97843ea90943578ac3b491c8952052~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp
看起来也没有太多无效的镜像

4.例行使用指令清除了部分无效的空间,不使用的镜像,但是发现只释放了一小部分的空间。

docker system prune -a

5.接下来,通过命令查看哪一个目录占用的空间最多

du -s /* | sort -nr
76e1d1819aff450eb14f0da1a6b3b085~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

发现/var目录占用的空间是最多的,刚好在35G左右,和上面的已使用的空间对上来了,看来问题就在这里面

6.那么现在使用指令进入到var目录下

cd var

7.使用指令查看当前目录下文件夹大小情况

du -h --max-depth=1
6b1f7f6dd0004fffad582af591e8eff7~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

是lib目录占用了33G的空间。

8.继续使用反复使用指令cd lib进入到lib目录下,使用指令du -h --max-depth=1查看当前目录下文件夹大小情况

9.最终是一个-json.log文件占用了28G的空间,看来是docker生成的日志文件,那么就是需要清除此文件,释放空间了。
d863abfdd8884eb486b145388dfe7083~tplv-k3u1fbpfcp-zoom-in-crop-mark_1512_0_0_0.webp

处理方案:

1.直接删除该文件,但因为该文件在docker运行时有程序占用,因此可能无法清除。所以需要重启docker,把容器停止后删除。

2.使用cat /dev/null > *-json.log命令进行清除,这样不需要重启docker,只是把该文件的内容清空。

需要注意的是:上面的解决方案只是暂时的,清除之后,docker依旧会继续产生日志,所以下次还需继续清除。

查看docker日志文件的方法

docker logs -f 容器ID/容器名

在linux上,一般docker的日志文件存储在/var/lib/docker/containers/container_id/ 目录下的 各个容器ID对应的目录下的*-json.log 文件中

方法1:可以直接进入该目录下,查找日志文件

方法2:可以写一个脚本文件,执行即可

创建docker_log_size.sh文件

#!/bin/sh 
echo "======== docker containers logs file size ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
             ls -lh $log   
        done

为该文件设置权限

chmod +x docker_log_size.sh

执行该文件

./docker_log_size.sh

设置Docker容器日志文件大小限制

1.新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

# vim /etc/docker/daemon.json

{
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}

max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

2.然后重启docker的守护线程

命令如下:

systemctl daemon-reload
systemctl restart docker

【需要注意的是:设置的日志大小规则,只对新建的容器有效】