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)

摘抄文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM