最近使用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 ,原来的容器不会生产三个文件,不生效,需要重新创建容器