解决/var/lib/docker/overlay2占用过大
问题
今天在公司的时候终于解决了一直困扰我很久的一个问题。
问题的背景是我在一台机器上用docker依次部署了canal-server,canal-adapter作为公司同步数据的节点。但是随着时间的推移容器占用的磁盘越来越大了,到现在不得不解决了,直接磁盘满了。

解决方案
列举出现这种情况所有可能的原因,然后逐一排除。首先是在/var/docker目录下,因此所有的原因应该与docker增加的文件和日志有关。
未使用的容器/镜像
用分别检查占用空间总共占用不大2G,另外这台机器专门用来做数据同步。其他任何程序和文件都没有安装。日志文件 由于之前是将canal-server,canal-adapter的日志配置设置为3个文件50M进行日志回滚,因此对日志输出忽略了,但是这是canal服务本生记录并打印的日志。
实际上我在启动容器的时候docker的日志驱动默认为json-file,日志记录在/var/lib/docker/containers/{containerId}下
可以看到日志直接有20G~ 删除日志并重启容器后磁盘暂用恢复正常。
总结&扩展
通过这次处理的问题,可以得出docker默认的的日志驱动会捕获所有日志,如果希望对日志进行回滚需要在启动时设置参数
# max-size 最大数值
# max-file 最大日志数
docker docker run -it --log-opt max-size=10m --log-opt max-file=3 redis
但是如果不想每次创建容器都加日志参数命令那么修改 /etc/docker/daemon.json,并增加
{
"log-driver":"json-file",
"log-opts":{
"max-size" :"10m",
"max-file":"3"
}
}
重启docker后生效,已存在的容器则要新建
sudo systemctl daemon-reload
sudo systemctl restart docker