docker overlay2磁盘占满解决方案
1.定时清理日志(推荐)
-
打开定时器日志(ubuntu下、非ubuntu跳过此步骤)
vi /etc/rsyslog.d/50-default.conf
用 vim 打开 将 文件里的#cron.*前的#删掉
然后重新启动rsyslog服务service rsyslog restart
重启定时器
systemctl restart cron.service (>=centos7)
或者 service cron restart (<centos7)
或者 /etc/init.d/cron restart (ubuntu) -
编写定时脚本,定时器定时清理
注意:windows下创建文件放到linux下会执行失败,请在linux下创建好,将内容复制进去
mkdir /home/pjnj/cron && touch /home/pjnj/cron/cleanLog.sh
vi /home/pjnj/cron/cleanLog.sh
chmod 777 /home/pjnj/cron/cleanLog.sh
复制如下内容
#!/bin/bash
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
docker system prune --all --force --volumes
echo "======== end clean docker containers logs ========"
- 定时器编写并启动定时器
查看/var/log/corn.log 是否存在,不存在则创建
touch /var/log/cron.log
进入编辑模式
crontab -e
每隔1小时执行一次
0 */1 * * * /home/pjnj/cron/cleanLog.sh >/var/log/cron.log 2>&1
每天凌晨0点执行一次
0 0 * * * /home/pjnj/cron/cleanLog.sh >/var/log/cron.log 2>&1
每周一凌晨0点执行一次
0 0 * * 1 /home/pjnj/cron/cleanLog.sh >/var/log/cron.log 2>&1
重启定时器
systemctl restart cron.service (>=centos7)
或者 service cron restart (<centos7)
或者 /etc/init.d/cron restart (ubuntu)
2.设置日志大小(可参考)
vi /etc/docker/daemon.josn
{
"log-driver": "json-file",
"log-opts": {
"max-size": "200m",
"max-file": "5"
}
}
重启 daemon-reload、docker
systemctl daemon-reload
systemctl restart docker
3.清理未启用的images、containers、volumes(临时解决)
操作前请确保已经快照备份完成数据,并确保当前所有业务容器运行正常
docker system prune --all --force --volumes