Docker 日志太多?磁盤爆了?一篇教你搞定容器日志問題
今天分享一下如何處理Docker日志的問題。
一、Docker日志好坑
Docker 默認使用的是 json-file 日志驅動。日志會一直寫,一直寫,一直寫……沒有限制、沒有輪轉、沒有清理!
日志默認位置:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
當你發現它時,可能已經:
- 占了幾十個 G
- 吃滿了磁盤
- 服務都掛了!
二、如何處理日志問題
主要通過日志輪詢方式處理。下面介紹三種方式設置日志輪詢
1. 運行容器時設置輪轉策略(推薦)
docker run -d \
--name myapp \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest
參數解釋:
- max-size=10m:單個日志文件最大 10MB
- max-file=3:最多保留 3 個輪轉文件(最多 30MB)
容器總日志控制在 30MB 內,絕不爆炸!
2. 修改 Docker 配置
該配置適用于所有容器。
編輯配置文件 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
重啟 Docker 服務:
systemctl restart docker
注意:只對之后創建的容器生效!
3. 正在運行的容器
你可以這樣快速清理日志(生產環境慎用!):
echo "" > $(docker inspect --format='{{.LogPath}}' <container-id>)
或者更穩一點:
- docker stop 停掉容器
- docker rm 刪除容器
- 使用輪轉參數重新 run容器
4. 禁用日志輸出
這個操作慎用,有可能影響應用運行,而且不方便后續排查
docker run --log-driver=none 容器名
5. 日志快速清理
僅推薦在磁盤告急時臨時使用!
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;
三、實戰建議
根據不同場景推薦配置值。
場景 | 建議參數 |
開發環境 |
|
測試環境 |
|
生產環境 |
|
Docker 日志默認設置太坑,一定要手動配置!
最佳實踐:
- 用 json-file + max-size + max-file
- 修改 daemon.json 設置全局默認
- 老容器要么清理日志,要么重啟帶輪轉參數