在實踐應用的docker的過程中,某一天突然發現磁盤被沾滿,使用df -h指令和du -sh指令逐級檢視發現撐爆磁盤的檔案為docker生成的/var/lib/docker/containers的檔案。
而docker生成的這些檔案中占用空間最大的是*-json.log檔案。而此檔案的内容為docker生成的日志檔案。首先核查該檔案是否有用,如果有用可先進行備份,然後進行檔案内容的清除。
清除方法有兩種,第一種直接删除該檔案,但因為該檔案在docker運作時有程式占用,是以可能無法清除。是以可進行需要重新開機docker程式。
另外一種方案就是使用:cat /dev/null > *-json.log指令進行清除,這樣不需要重新開機docker,隻是把該檔案的内容清空。
但需要注意的是,無論以上兩種清除方法的哪一種,清除之後,docker依舊會繼續産生日志,是以要做好定時備份、清除的工作。
其中*-json.log檔案的目錄路徑類似以下目錄路徑:
/var/lib/docker/containers/f2a8646430bd5c5bb09cd67240e9363c28fa8498097db047287425ad56ab5330
如果是在aws服務下,清除時需要使用root角色,可先使用指令sudo -i 切換。
腳本處理
如果針對此問題經常出來,手動每次進行清理特别麻煩,可采用腳本來進一步改進。比如設定一個檢視的腳本docker_log_size.sh:
echo "======== docker containers logs file size ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
同時,也可以通過腳本來清理:clean_docker_log.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 ========"
當然,更進一步也可以配合定時任務來進行處理,不過關鍵日志丢失等問題。這裡就不再舉例說明了。
關注公衆号:程式新視界,一個讓你軟實力、硬技術同步提升的平台
除非注明,否則均為程式新視界原創文章,轉載必須以連結形式标明本文連結