docker 设置日志文件大小、个数及清理 | 您所在的位置:网站首页 › docker日志文件存放路径更改 › docker 设置日志文件大小、个数及清理 |
docker容器在运行一定时间后会产生大量的日志,导致磁盘空间问题出现。现在有2个方案可以限制docker容器日志文件大小及个数 容器范围内docker run或dokcer create时添加参数如创建并运行 docker run --log-opt max-size=10m --log-opt max-file=3 全局范围内修改docker daemon.json文件,配置日志文件参数默认 /etc/docker/daemon.json { "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "1" }} 修改后,docker需要重新加载配置文件和重启。CentOS7的操作 systemctl daemon-reloadsystemctl restart docker 注意:新创建的容器会生效,原有容器不生效。 参数 说明log-opts max-size 容器日志文件上限大小log-opts max-file 窗口日志文件上限个数查出Docker容器日志并删除脚本默认查找目录 /var/lib/docker/containers/ #!/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容器。————————————————版权声明:本文为CSDN博主「写代码的蓝胖子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/huangliuyu00/article/details/90384345
默认情况下,Docker 捕获所有容器的标准输出(和标准错误),并将其写入使用 JSON 格式的文件。这个 JSON 格式用每个行的来源(stdout 或 stderr)及其时间戳注释。每个日志文件都包含只有一个容器的信息。 1. 使用要使用 json-file 驱动程序作为默认的日志驱动程序,需要设置 daemon.json 文件中的 log-driver 和 log-opt 关键字为合适的值。这个文件通常在 /etc/docker/(Linux)或 C:\ProgramData\docker\config\daemon.json (Windows)。更多信息参考 daemon.json 。 下面示例设置日志驱动程序为 json-file 并设置了 max-size 选项。 { "log-driver": "json-file", "log-opts": { "max-size": "10m" } }
重新启动 Docker 以使更改对新创建的容器生效。现有容器即使重启 Docker 也不会使用新的日志记录配置。 可以在 docker container create 或 docker run 命令中通过 --log-driver 标志为某个特定容器设置日志驱动程序: $ docker run \ --log-driver json-file --log-opt max-size=10m \ alpine echo hello world 1.1 选项json-file日志驱动程序支持下面的日志选项: 选项描述示例值 max-size 滚动前日志的最大大小。一个正整数加上一个代表测量单位(k,m 或 g)的修饰符。默认为 -1(无限制)。 --log-opt max-size=10m max-file 可以存在的最大日志文件数量。如果滚动日志会创建多余文件,则会删除最旧的文件。只有在设置了 max-size 时才有效。一个正整数。 默认为1。 --log-opt max-file=3 labels 在启动 Docker 守护进程时适用。守护进程接受的日志相关标签的逗号分隔列表。用于高级日志标记选项。 --log-opt labels=production_status,geo env 在启动 Docker 守护进程时适用。此守护程序接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标记选项。 --log-opt env=os,customer env-regex 与 env 类似且兼容。一个正则表达式来匹配与日志相关的环境变量。用于高级日志标记选项。 `–log-opt env-regex=^(os 1.2 示例这个例子启动的 alpine 容器最多有 3 个日志文件且每个日志文件不大于 10MB。 $ docker run -itd --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 alpine ash 1. 问题docker容器日志导致主机磁盘空间满了。docker logs -f container_name 发现大量日志占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 查出Docker容器日志并删除脚本在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/下面, 以json.log结尾的文件(业务日志)很大,查看各个日志文件大小的脚本docker_log_size.sh,内容如下: ![]() ![]() 如果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: "50m" max-file: "2"重启nginx容器之后,其日志文件的大小就被限制在100MB,再也不用担心了。 全局设置新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下: 1 2 3 4 5 6 7 # vim /etc/docker/daemon.json { "registry-mirrors": ["http://f613ce8f.m.daocloud.io"], "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"} # max-size=500m,意味着一个容器日志大小上限是500M,max-file=3,意味着一个容器有三个日志,分别是id-json.log、id-json.log.1、id-json.log.2。 }// 重启docker守护进程 # systemctl daemon-reload 、# systemctl restart docker注意:设置的日志大小,只对新建的容器有效。 https://www.cnblogs.com/kaishirenshi/p/10670107.html
|
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |