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
Bash

为该文件设置权限

chmod +x docker_log_size.sh
Plain text

执行该文件

./docker_log_size.sh
Plain text

设置 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"}
}
Plain text

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

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

命令如下:

systemctl daemon-reload
systemctl restart docker
Plain text

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