/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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/156124.html
標籤:Linux
下一篇:gcc 4.9 編譯安裝 in Ubuntu 18.04(主要用于在無root權限下,進行更新系統 gcc 版本)gcc8 編譯 CentOS 7 環境下成功;
