文章目录
- 现象
- 进入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中启动一个新容器的常用命令。以下是命令中各部分的详细解释:
-
docker run
- 这是Docker中用于创建并启动新容器的基本命令。 -
-it
- 这两个选项通常一起使用:-i
或--interactive
保持容器的标准输入开启。-t
或--tty
分配一个伪终端,这使得我们可以与容器进行交互。
-
--log-driver=json-file
- 指定使用json-file
作为日志驱动,这是Docker的默认日志驱动,用于将容器的标准输出和错误输出记录到JSON格式的文件中。 -
--log-opt max-size=10m
- 设置日志文件的最大大小为10MB。当日志文件达到这个大小时,Docker会自动轮转日志,即关闭当前日志文件,并开启一个新的日志文件继续记录。 -
--log-opt max-file=3
- 设置最多保留3个轮转的日志文件。当创建新的日志文件时,如果已经有3个日志文件,最旧的日志文件将被删除。 -
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运行时的不同数据和文件。这里是各个目录的主要内容和用途:
-
/var/lib/docker/trust
:存储与Docker内容信任相关的数据。内容信任是Docker的安全特性,用于确保镜像未被篡改。 -
/var/lib/docker/network
:包含有关Docker网络配置的数据。这些文件用于管理Docker容器间的网络连接。 -
/var/lib/docker/containers
:存储Docker容器的运行时数据。每个容器会在此目录下有一个对应的子目录,其中包含容器的配置文件、日志、以及一些状态文件。 -
/var/lib/docker/swarm
:如果Docker被配置为使用Swarm模式,该目录会用来存储Swarm模式相关的数据。Swarm是Docker的原生集群管理和编排工具。 -
/var/lib/docker/volumes
:存储Docker卷的数据。Docker卷用于数据持久化和数据共享,允许容器间或主机和容器间共享数据。 -
/var/lib/docker/overlay2
:这是Docker使用的存储驱动之一,默认情况下用于管理容器和镜像的层。每个层存储文件的改动,所有层合起来形成完整的文件系统。 -
/var/lib/docker/tmp
:临时文件存储目录,用于存放处理过程中的临时文件。 -
/var/lib/docker/image
:存储镜像的元数据。这些元数据包括镜像的配置信息、层的信息等。 -
/var/lib/docker/buildkit
:用于存储BuildKit构建器的数据。BuildKit是Docker的一种现代镜像构建工具,优化了构建过程和资源利用。 -
/var/lib/docker/plugins
:存储Docker插件的数据。这些插件可以扩展Docker的功能,如网络、存储卷驱动等。 -
/var/lib/docker/runtimes
:如果有配置自定义的容器运行时,其数据会存储在这个目录下。
在你的输出中,overlay2
目录占用了最多的磁盘空间,这是因为它包含了所有容器和镜像的层数据。若空间使用过高,可以考虑清理无用的镜像和容器来释放空间。