json log文件 過大


/var/lib/docker/containers/[容器ID]/[容器ID]-json.log

一般來說 docker 會把容器內 stdout 和 stderror 的內容打印到 json.log 中,如果增長太快的話需要看一下是不是你的 image 里相關的配置有問題,太多的東西都打到 stdout 去了。如果只是想關閉打印日志的話可以在 docker run 的時候加上參數 --log-driver="none"。

修改 --log-driver=json-file
重啟docker服務: service docker restart即可

 

cat /dev/null >json.log 清空這個文件的內容,釋放磁盤空間; 需要重啟容器,才能繼續記錄日志。

 

#添加max-size參數來限制文件大小
docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash

 

Docker容器所有的標准輸出標准錯誤都會被Docker Daemon接管

Docker容器本身理應盡量無狀態,容器內應用持久化的日志則有狀態,頻繁遷移不宜容器日志管理

Docker容器的應用日志,如果自己發往集中的日志處理中心,則為上上策,易統一;問題是成本高,得有錢買機器,還需統一化的標准

 

目標:

通過標准輸出,傳遞Docker容器內部的應用持久化日志文件。

方法:

簡單重構應用Dockerfile的CMD指令。

問題假設:

原先應用Dockerfile的CMD指令為CMD [“python”, “app.py”],應用打印日志的路徑為/var/log/app.log。

具體實現:

第一步:在原先Dockerfile所在目錄下,創建一個run.sh文件,文件內容為:

#!/bin/bash

tail -F /var/log/app.log &

exec python app.py

第二步:修改Dockerfile,刪除原先的CMD,替換為三個指令。

指令一:ADD run.sh /;

指令二:RUN chmod +x run.sh;

指令三:CMD [“./run.sh”]

原理剖析:

run.sh中啟動了一個后台進程,使用tail命令強制將/var/log/app.log的內容傳輸至標准輸出,

隨后使用exec命令將python app.py作為容器的主進程運行。

 

 

官網文檔鏈接:

https://docs.docker.com/config/containers/logging/json-file/#usage


免責聲明!

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



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