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)