徹底解決 Docker 日志膨脹
最近,我發現一臺服務器的磁盤空間即將耗盡。經過排查,發現某個 Docker 容器在一年內生成了14 GB 的日志文件。為避免類似問題,本文將指導你如何快速檢查、清理 Docker 日志,并設置日志大小限制以防止未來日志失控。
- 重啟容器(如服務器重啟或手動執行 systemctl restart docker)不會清除日志,日志文件會持續累積。
- 重建容器(刪除并重新創建容器)才會重置日志。
檢查 Docker 日志大小
默認日志路徑:
/var/lib/docker/containers/<容器ID>/<容器ID>-json.log
使用以下命令按大小排序查看所有日志文件:
find /var/lib/docker/containers/ -name "*-json.log" | xargs du -h | sort -hr
示例輸出:
5.9G /var/lib/docker/containers/d2e92.../d2e92...-json.log
4.9G /var/lib/docker/containers/ec7a4.../ec7a4...-json.log
根據容器 ID 查找容器名稱
使用docker inspect命令:
docker inspect --format='{{.Name}}' <容器ID>
示例輸出:
/php-fpm-valente
(注意:輸出結果會以斜杠開頭,實際容器名為php-fpm-valente)
清理 Docker 日志
- 清理單個日志文件:
truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
- 清理所有日志文件(謹慎使用):
truncate -s 0 /var/lib/docker/containers/*/*-json.log
設置日志大小限制
- 編輯 Docker 守護進程配置文件/etc/docker/daemon.json(若不存在則新建):
sudo nano /etc/docker/daemon.json
- 添加以下內容(限制單個日志文件為 10MB,保留最多 3 個歸檔文件):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- 重啟 Docker 服務以生效:
sudo systemctl restart docker
- 注意:此配置僅對新創建的容器生效。若需應用到現有容器,需刪除并重建它們。
驗證配置
使用以下命令檢查容器的日志配置:
docker inspect <容器名稱> | grep -A 4 LogConfig
示例輸出:
"LogConfig": {
"Type": "json-file",
"Config": {
"max-file": "3",
"max-size": "10m"
}
}
總結
- 定期檢查日志大小,避免磁盤空間耗盡。
- 通過daemon.json配置日志輪轉,限制日志文件大小。
- 清理日志時優先使用truncate,避免直接刪除文件導致容器異常。
遵循以上實踐,可有效管理 Docker 日志,提升服務器資源利用率和穩定性。更多配置細節請參考Docker 官方文檔[1]。
參考資料
[1]Docker 官方文檔:https://docs.docker.com/config/containers/logging/configure/