最近使用docker 發現一個可怕的問題,那就是創建容器后,會把磁盤空間占滿,太可惡了。
經過查閱網站,發現這個問題是可以避免的。
可怕的路徑:/var/lib/docker/containers
原理:
docker 創建容器默認是生成一串數字,系統會為這串數字創建一個目錄。里面有*json.log 日志文件,記錄容器的日志。
如果不修改docker 日志配置文件,默認生成一個日志,這里舉例改為100M ,保留三個文件。
首先生成一個*json.log 文件,日志大小到100M 后,系統會自動把 *json.log 文件,寫入 *json.log.1里面
等到*json.log 文件 再次到 100M后,系統會自動把 *json.log 文件,寫入 *json.log.1里面,而*json.log.1 文件寫入 *json.log.2 里面。
依次類推
我這里有過測試,把其中一個 *json.log.2 文件刪除,過一會會生成 *json.log.2 文件,如果只保留 *json.log.2 文件,把 *json.log.1 日志文件刪除,系統會吧 *json.log.1 日志文件內容寫入 *json.log.2 里面。
一、修改docker 日志的配置文件
我這里修改的,日志大小100M,保留三個文件
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.docker-cn.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"3"}
}
二、重啟dokcer
systemctl restart docker
三、創建容器
我這里使用的tomcat鏡像,如果沒有鏡像可以自己拉取鏡像
docker pull tomcat
docker run --name webtomcat -d -p 8081:8080 -d centos-jdk-tomcat:v20200121
創建容器后會生成一串數字,docker 會已這個數字創建一個容器的目錄
/var/lib/docker/containers/5c0c836b5aaf2088e04d4df1ed9cc3aa770f300ca097b9a8c70416983ed31bd8
四、觀察日志大小情況
cd /var/lib/docker/containers/5c0c836b5aaf2088e04d4df1ed9cc3aa770f300ca097b9a8c70416983ed31bd8
發現日志文件已經生成兩個文件了,再等等看是否還生成一個文件。
最后發現,又生成了一個文件
4.1、觀察日志是否是循環寫入
我這里在*.1 日志文件最后寫 1111
我這里在*.2 日志文件最后寫 2222
4.2、觀察日志文件是否有變化
需要登錄*.log 這個文件變為100M后,發現變小了,發現他的日志寫入到了 *.1里面,而*.1的日志寫入到了 *.2里面
五、這里遇到的問題
如果修改docker日志配置文件,重啟docker ,原來的容器不會生產三個文件,不生效,需要重新創建容器