date :2019-04-08 13:57:40
1. 問題
docker容器日誌導致主機磁碟空間滿了。docker logs -f container_name 發現大量日誌
占用空間,不用的日誌可以清理掉了。
2. 解決方法
2.1 查出docker容器日誌並刪除指令碼
在linux上,容器日誌一般存放在/var/lib/docker/containers/container_id/
下面, 以json.log結尾的檔案(業務日誌)很大,檢視各個日誌檔案大小的指令碼docker_log_size.sh,內容如下:
1#!/bin/sh
2 echo "
*****=== start clean docker containers logs *****===
"3 logs=$(find /var/lib/docker/containers/ -name *-json.log)
4for log in
$logs
5do
6 echo "
clean logs : $log
"7 cat /dev/null >$log
8done
9 echo "
*****=== end clean docker containers logs *****===
"
如果docker容器正在執行,那麼使用rm -rf
方式刪除日誌後,通過df -h
會發現磁碟空間並沒有釋放。原因是在linux或者unix系統中,通過rm -rf
或者檔案管理器刪除檔案,將會從檔案系統的目錄結構上解除鏈結(unlink)。如果檔案是被開啟的(有乙個程序正在使用),那麼程序將仍然可以讀取該檔案,磁碟空間也一直被占用。正確姿勢是cat /dev/null > *-json.log
,當然你也可以通過rm -rf
刪除後重啟docker。
2.2 設定docker容器日誌大小(治本)
上述方法,日誌檔案遲早又會漲回來。要從根本上解決問題,需要限制容器服務的日誌大小上限。這個通過配置容器docker-compose的max-size選項來實現
nginx:image: nginx:1.12.1
restart: always
logging:
driver: 「json-file」
options:
max-size: 「5g」
重啟nginx容器之後,其日誌檔案的大小就被限制在5gb,再也不用擔心了。
新建/etc/docker/daemon.json,若有就不用新建了。新增log-dirver和log-opts引數,樣例如下:
# vim /etc/docker/daemon.json# max-size=500m,意味著乙個容器日誌大小上限是500m,max-file=3,意味著乙個容器有三個日誌,分別是id+.json、id+1.json、id+2.json。
}
// 重啟docker守護程序
# systemctl daemon-reload 、
# systemctl restart docker
注意:設定的日誌大小,只對新建的容器有效。
Docker容器日誌清理
docker容器導致主機磁碟空間滿了 如何清理docker容器日誌?如何找出docker容器日誌檔案 容器日誌一般存放在 var lib docker下面,可使用如下命令檢視各個日誌的檔案大小 ls lh find var lib docker containers name json.log 如何...
Docker容器日誌清理
如何清理docker占用的磁碟空間?dockone.io 補充 檢視docker日誌檔案,單獨列出每個容器的日誌檔案大小。ls lh find var lib docker containers name json.log docker容器所在目錄 var lib docker docker的 va...
Docker容器日誌檢視與清理
全域性設定 參考文章 docker容器日誌導致主機磁碟空間滿了。docker logs f container name噼里啪啦一大堆,很占用空間,不用的日誌可以清理掉了。在linux上,容器日誌一般存放在 var lib docker containers container id 下面,以jso...