首页 前端知识 Docker日志占用大量空间排查(docker日志清理)(日志撑爆系统)(日志驱动配置json-file)(--log-driver、--log-opt)/var/lib/docker存储目录介绍

Docker日志占用大量空间排查(docker日志清理)(日志撑爆系统)(日志驱动配置json-file)(--log-driver、--log-opt)/var/lib/docker存储目录介绍

2024-08-25 23:08:32 前端知识 前端哥 804 135 我要收藏

文章目录

    • 现象
      • 进入java容器看,看不出来
      • 排查
      • 解决方法:配置docker run日志大小数量限制(日志驱动配置json-file)
        • 示例
    • `/var/lib/docker`目录介绍

现象

进入java容器看,看不出来

docker exec -it kyai_kykj /bin/bash

在这里插入图片描述

排查

阿尔格纳威潘三矿深井虚拟机,存储空间被占满了,发现是kykj容器占用得多:

在这里插入图片描述

在这里插入图片描述

这个日志确实大:74G

ls -lh /var/lib/docker/containers/1ee8a4f6b64a6ba54bf7b576306f9c2d0200e8332cd3921d258206a4605bd336/*-json.log

在这里插入图片描述

在这里插入图片描述

这可能是spring boot框架连接mysql失败时,不停重连打印日志导致的

Docker容器本身并不提供自动清理日志的功能。Docker日志主要由Docker守护进程负责处理,并存储在宿主机的文件系统中。

Docker 默认使用的日志驱动是 json-file。这种驱动会将容器的标准输出和标准错误输出存储为JSON格式的日志文件。这些日志文件位于宿主机上,通常存放在每个容器的目录下,路径类似于 /var/lib/docker/containers/[container-id]/[container-id]-json.log

使用 json-file 日志驱动的好处是简单易用,且可以直接通过 docker logs [container-id] 命令查看容器的日志输出。但是,这种方式也可能导致日志文件快速增长,尤其是对于日志输出较多的应用,因此需要合理配置日志的最大大小和文件轮换数量,以避免占用过多的磁盘空间。

解决方法:配置docker run日志大小数量限制(日志驱动配置json-file)

命令 docker run -it --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 my-image 是在Docker中启动一个新容器的常用命令。以下是命令中各部分的详细解释:

  1. docker run - 这是Docker中用于创建并启动新容器的基本命令。

  2. -it - 这两个选项通常一起使用:

    • -i--interactive 保持容器的标准输入开启。
    • -t--tty 分配一个伪终端,这使得我们可以与容器进行交互。
  3. --log-driver=json-file - 指定使用 json-file 作为日志驱动,这是Docker的默认日志驱动,用于将容器的标准输出和错误输出记录到JSON格式的文件中。

  4. --log-opt max-size=10m - 设置日志文件的最大大小为10MB。当日志文件达到这个大小时,Docker会自动轮转日志,即关闭当前日志文件,并开启一个新的日志文件继续记录。

  5. --log-opt max-file=3 - 设置最多保留3个轮转的日志文件。当创建新的日志文件时,如果已经有3个日志文件,最旧的日志文件将被删除。

  6. my-image - 指定Docker镜像的名称,容器将基于此镜像创建。这个名称可能是本地镜像的名称或者是仓库中的镜像名称。

示例

要在你的 Docker run 命令中添加日志管理功能,你可以加入 --log-driver--log-opt 选项来控制日志文件的大小和数量。以下是你的命令更新后的版本,设置每个日志文件最大为100MB,并且最多保留3个日志文件:

docker run -d \
    -e TZ="Asia/Shanghai" \
    --restart=always \
    -p 8080:8080 \
    -p 11111:11111 \
    -v /etc/localtime:/etc/localtime \
    -v /ky/ky_ai_solution.json:/opt/ky_ai_solution.json \
    -v $DEPLOY_PATH/mount:$DEPLOY_PATH/mount \
    --name $CONTAINER_NAME \
    --log-driver=json-file \
    --log-opt max-size=100m \
    --log-opt max-file=3 \
    $IMAGE_NAME:$IMAGE_TAG \
    java -jar /ky/java/kykj/mount/kykj.jar --spring.config.location=/ky/java/kykj/mount/application.yml

在这个命令中:

  • --log-driver=json-file 指定日志驱动为 json-file,这是Docker的默认日志驱动。
  • --log-opt max-size=100m 设置每个日志文件的最大大小为100MB。
  • --log-opt max-file=3 设置最多保留3个日志文件。

这种配置可以有效管理容器的日志文件,避免日志文件过大消耗宿主机的磁盘空间。同时,通过轮转和限制文件数量,保持日志的新鲜度和可管理性。

在14服务器上测试了是可行的,日志大小上限为100MB,上限为3个,不断生成日志,测试发现一旦日志总大小满300MB,就会删除旧的那个,然后日志总大小变成200MB。

/var/lib/docker目录介绍

在Docker的/var/lib/docker/目录下,有几个重要的子目录,这些目录用于存储Docker运行时的不同数据和文件。这里是各个目录的主要内容和用途:

  1. /var/lib/docker/trust:存储与Docker内容信任相关的数据。内容信任是Docker的安全特性,用于确保镜像未被篡改。

  2. /var/lib/docker/network:包含有关Docker网络配置的数据。这些文件用于管理Docker容器间的网络连接。

  3. /var/lib/docker/containers:存储Docker容器的运行时数据。每个容器会在此目录下有一个对应的子目录,其中包含容器的配置文件、日志、以及一些状态文件。

  4. /var/lib/docker/swarm:如果Docker被配置为使用Swarm模式,该目录会用来存储Swarm模式相关的数据。Swarm是Docker的原生集群管理和编排工具。

  5. /var/lib/docker/volumes:存储Docker卷的数据。Docker卷用于数据持久化和数据共享,允许容器间或主机和容器间共享数据。

  6. /var/lib/docker/overlay2:这是Docker使用的存储驱动之一,默认情况下用于管理容器和镜像的层。每个层存储文件的改动,所有层合起来形成完整的文件系统。

  7. /var/lib/docker/tmp:临时文件存储目录,用于存放处理过程中的临时文件。

  8. /var/lib/docker/image:存储镜像的元数据。这些元数据包括镜像的配置信息、层的信息等。

  9. /var/lib/docker/buildkit:用于存储BuildKit构建器的数据。BuildKit是Docker的一种现代镜像构建工具,优化了构建过程和资源利用。

  10. /var/lib/docker/plugins:存储Docker插件的数据。这些插件可以扩展Docker的功能,如网络、存储卷驱动等。

  11. /var/lib/docker/runtimes:如果有配置自定义的容器运行时,其数据会存储在这个目录下。

在你的输出中,overlay2目录占用了最多的磁盘空间,这是因为它包含了所有容器和镜像的层数据。若空间使用过高,可以考虑清理无用的镜像和容器来释放空间。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/16919.html
标签
docker容器
评论
发布的文章

LoopBack组件JSONAPI使用指南

2024-09-04 23:09:43

编译JSONCPP源码

2024-09-04 23:09:49

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!