Docker.logs-->日志清理
1.手动清理->切换到日志目录,直接执行命令
#找到需要清理日志的容器Id-->"0cf869a294227d349c946292ea06e9dbfbf4c4a07e16c191e1b02a37a890cc60"
#可以格式化一下返回结果-->docker ps --format "{{.ID}}\t{{.Names}}"
docker ps
#容器默认目录-->"/var/lib/docker/containers"
cd /var/lib/docker/containers/0cf869a294227d349c946292ea06e9dbfbf4c4a07e16c191e1b02a37a890cc60/
#查看容器中是否存在log日志文件-->发现确实存在日志文件.{0cf869a294227d349c946292ea06e9dbfbf4c4a07e16c191e1b02a37a890cc60-json.log}
ll
#清除日志
cat /dev/null > 0cf869a294227d349c946292ea06e9dbfbf4c4a07e16c191e1b02a37a890cc60-json.log
#验证日志是否清除-->{test}为容器名称
docker logs test
自动清理->执行脚本清理Docker容器日志(治标)
#docker_logs_clean.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------------------------"
通过配置->设置Docker容器日志大小(治本)
单独容器设置
上述方法,日志文件迟早又会涨回来.
要从根本上解决问题,需要限制容器服务的日志大小上限.
这个通过配置容器docker-compose的max-size选项来实现
nginx:
image: nginx:1.12.1
restart: always
logging:
driver: “json-file”
options:
max-size: “5g”
重启nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了.
全局设置
新建.{/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
注意-->设置的日志大小,只对新建的容器有效.
附加脚本->查找日志的大小
#错误示范
[root@node1 ~]# mkdir /root/file/docker_scripts/logs_scripts
mkdir: cannot create directory ‘/root/file/docker_scripts/logs_scripts’: No such file or directory
#正确操作(参数.{-p}又忘了...)
[root@node1 ~]# mkdir -p /root/file/docker_scripts/logs_scripts
[root@node1 ~]# cd /root/file/docker_scripts/logs_scripts/
#在{/var/lib/docker/containers/}目录下查找以.log结尾的文件名
#查找-->log文件-->参数.{name}不忽略大小写
find /var/lib/docker/containers/ -name *-json.log
#查找-->log文件-->参数.{iname}不忽略大小写
find /var/lib/docker/containers/ -iname *-json.LOG
docker_logs_size.sh源码(正确版本)
#!/bin/bash
echo "=========docker containers logs file size ========="
#注意-->用户自定义变量,变量名称和值之间的等于号("=")不需要空格
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
#新建/编辑-->文件
vim docker_logs_size.sh
小结
小结
docker_logs_size.sh
是我纯手打,
所以有一些意外的收获(报错),如果直接复制过来的话,
可能就不会发现这些小细节了...
并且有个报错-->logs: command not found
,
这个需要有个思想的转换,直接搜索这个错误是不会有太大的提示作用的,
要理清楚,这一步是做什么导致出错的.
就像是做功能开发,要先理解需求,
要将问题抽象出来,
这个地方抽象出来的搜索关键字就是-->"Shell(Bash)用户自定义变量使用方法"
附加.1.错误版本
#!/bin/bash
o "=========docker containers logs file size ========="
logs = $(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
附加.2.Shell(Bash)用户自定义变量使用方法示范
Shell(Bash)用户自定义变量使用方法示范(又是一个小细节)
#正确示范
[root@node1 logs_scripts]# name="ok"
[root@node1 logs_scripts]# echo $name
ok
#错误示范
[root@node1 logs_scripts]# name = "ok"
-bash: name: command not found
附加.3.报错集锦
报错-->拼写错误-->chmod
#"chomod"-->拼写错误.{"正确":"chmod","错误":"chomod"}
[root@node1 logs_scripts]# chomod +x docker_logs_size.sh
-bash: chomod: command not found
[root@node1 logs_scripts]# chmod +x docker_logs_size.sh
报错-->拼写错误-->chmod +x(如果多空格会报错)
#"chmod +x"-->拼写错误.{"正确":"chmod +x","错误":"chmod + x"}
[root@node1 logs_scripts]# chomod + x docker_logs_size.sh
[root@iZ2zeca7jric8sx4f3n7spZ logs]# chmod + x docker_logs_size.sh
chmod: cannot access 'x': No such file or directory
#正确
[root@node1 logs_scripts]# chmod +x docker_logs_size.sh
报错-->拼写错误-->"echo"
[root@node1 logs_scripts]# ./docker_logs_size.sh
./docker_logs_size.sh: line 1: o: command not found
./docker_logs_size.sh: line 2: logs: command not found
#修改{docker_logs_size.sh}源码
[root@node1 logs_scripts]# vim docker_logs_size.sh
#继续报错
[root@node1 logs_scripts]# ./docker_logs_size.sh
=========docker containers logs file size =========
./docker_logs_size.sh: line 2: logs: command not found
ls: cannot access logs: No such file or directory
#这个问题是由于用户自定义变量使用不规范导致
报错-->语法错误-->用户自定义变量
#错误示范(注意空格)
logs = $(find /var/lib/docker/containers/ -name *-json.log)
#正确示范
logs=$(find /var/lib/docker/containers/ -name *-json.log)