记录Docker日志将磁盘占满导致服务器崩掉
目录
问题
突然服务器站点访问异常, 数据库无法连接,好在ssh能够连接上去
定睛一看 发现磁盘被吃满了, 不知道为啥.. 运行部分命令无响应, 有些提示
-bash: cannot create temp file for here-document: No space left on device ls -bash
? 为什么磁盘满了?
使用 df -h
一看果然都没有了
解决
查看一下大文件
du -sh /* | grep G
...
/var/lib/docker/containers
? docker
难道是docker日志的问题吗
通过 docker ps
好像没问题 docker stats
好像掉了一个服务
查看一下日志呢
du -d1 -h /var/lib/docker/containers | sort -h
32K /var/lib/docker/containers/d607c06e475191fff1abd0c2b4b672e7fe8a96cb197f4e8557b18600de2e60af
36K /var/lib/docker/containers/0d4321106721b9d26335fefef7b9e8e23629691684a4da2f953ac8223c8240c3
36K /var/lib/docker/containers/7525aab4aa917aa1016169114762261726ac7b9cc712bef35cdc7035b50d20ce
36K /var/lib/docker/containers/9252e1c373d59ef5613c2b6122eb6e43aa2bd822bd2c199aa67d6eb659c4adb7
10G /var/lib/docker/containers
1525M /var/lib/docker/containers/15700ee92cd2831554b9a1e78127df0f07248c1498d35c17525407bc8a98bc1a
.. 离谱
清理文件
sh -c "cat /dev/null > ${log_file_name}"
应急情况推荐rm -rf /var/lib/docker/containers
后续百度解决方案
- 单一容器限制日志大小
- 全局限制日志大小(只针对新创建的容器)
单一容器配置
启动
docker run -it --log-opt max-size=10m --log-opt max-file=3 redis
但是启动后的怎么办呢
只能通过脚本去定时清理了..
#!/bin/sh
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
echo "======== end clean docker containers logs ========"
全局配置
vim /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts":{
"max-size" :"50m",
"max-file":"3"
}
}
重启 Docker 服务
systemctl daemon-reload
systemctl restart docker