杨海振
当自己的才华撑不起野心时,那就沉下心来学习吧!
1.查看磁盘使用情况
df -h
2.找到容器的containerId-json.log⽂件,并清理(治标不治本,log迟早还会⼤的)查看各个容器的log⽂件⼤⼩
find /var/lib/docker/containers/ -name *-json.log |xargs du -sh

3.执⾏清理
$ cat /dev/null>/var/lib/docker/containers/dfe25896671f0def031c5ffeb12dd335f7f54212c6ca5d3aca1c3f50b5e1eec4/dfe25896671f0def03json.log

4.如果docker容器正在运⾏,那么使⽤rm -rf⽅式删除⽇志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者⽂件管理器删除⽂件,将会从⽂件系统的⽬录结构上解除链接(unlink)。如果⽂件是被打开的(有⼀个进程正在使⽤),那么进程将仍然可以读取该⽂件,磁盘空间也⼀直被占⽤。正确姿势是echo > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供⼀个⽇志清理脚本clean_docker_log.sh,内容如下:

#!/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 ========"
# chmod +x clean_docker_log.sh
# ./clean_docker_log.sh

但是,这样清理之后,随着时间的推移,容器⽇志会像杂草⼀样,。

5.设置Docker容器⽇志⼤⼩(治本)设置⼀个容器服务的⽇志⼤⼩上限上述⽅法,⽇志⽂件迟早⼜会涨回来。要从根本上解决问题,需要限制容器服务的⽇志⼤⼩上限。这个通过配置容器docker-compose的max-size选项来实现

nginx: 
image: nginx:1.12.1
restart: always 
logging: 
driver: “json-file” 
options: 
max-size: “5g”

重启nginx容器之后,其⽇志⽂件的⼤⼩就被限制在5GB,再也不⽤担⼼了。
全局设置

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

# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"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。
// 重启docker守护进程

# systemctl daemon-reload
# systemctl restart docker
注意:设置的⽇志⼤⼩,只对新建的容器有效。

链接:https://wenku.baidu.com/view/a3304301cfbff121dd36a32d7375a417866fc1ed.html

7.查询日志脚本
vim 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

8.清理日志脚本
vim clean_docker_log.sh
#!/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 ========"

chmod +x clean_docker_log.sh
./clean_docker_log.sh
posted on 2022-05-07 16:11  沧海浮尘  阅读(1)  评论(0)    收藏  举报