docker 设置日志文件大小及个数
docker容器在运行一定时间后会产生大量的日志,导致磁盘空间问题出现。
容器范围内
docker run或dokcer create时添加参数
如创建并运行
1 | docker run -- log -opt max-size=10m -- log -opt max-file=3 |
全局范围内
修改docker daemon.json文件,配置日志文件参数
默认 /etc/docker/daemon.json(注:添加时,直接全部复制下面的内容,在原有的配置下面另起一行粘贴)
1 2 3 4 5 6 7 | { "log-driver" : "json-file" , "log-opts" : { "max-size" : "50m" , "max-file" : "1" } } |
较全的daemon.json配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ cat <<EOF > /etc/docker/daemon.json { "registry-mirrors" : [ "https://xxxx" ], "live-restore" : true , "default-shm-size" : "128M" , "max-concurrent-downloads" : 10, "oom-score-adjust" : -1000, "debug" : false , "exec-opts" : [ "native.cgroupdriver=cgroupfs" ], "data-root" : "/mnt/data/docker-data" , "log-driver" : "json-file" , "log-opts" : { "max-size" : "20m" , "max-file" : "3" }, "storage-driver" : "overlay2" , "storage-opts" : [ "overlay2.override_kernel_check=true" ] } EOF |
修改后,docker需要重新加载配置文件和重启。
1 2 | systemctl daemon-reload systemctl restart docker |
注意:新创建的容器会生效,原有容器不生效。
log-opts max-size 容器日志文件上限大小
log-opts max-file 窗口日志文件上限个数
查出Docker容器日志并删除脚本
默认查找目录 /var/lib/docker/containers/
1 2 3 4 5 6 7 8 9 | #!/bin/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 ========" |
docker容器正在运行的话,使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。
原因是通过rm -rf删除,将会从文件系统的目录结构上解除链接(unlink)。
如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也是一直被占用。
正确操作覆盖操作 *cat /dev/null > -json.log。
或者可以通过rm -rf删除后重启docker容器。