docker 设置日志文件大小、个数及清理 您所在的位置:网站首页 docker日志文件存放路径更改 docker 设置日志文件大小、个数及清理

docker 设置日志文件大小、个数及清理

2023-10-19 01:50| 来源: 网络整理| 查看: 265

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,内容如下:

复制代码 1 #!/bin/sh 2 echo "======== start clean docker containers logs ========" 3 logs=$(find /var/lib/docker/containers/ -name *-json.log) 4 for log in $logs 5 do 6 echo "clean logs : $log" 7 cat /dev/null > $log 8 done 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: "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 实验室设备网 版权所有