文章首发于个人博客
事件
有一个任务需要把当前正在使用的镜像导出为离线包,在导出过程中发现速度特别慢,第一反应是CPU或内存被拉満了,top查看后是正常的,那问题可能出在磁盘上。
服务器上暂时没有合适的查看磁盘I/O的工具,只好先看下容量:
df -h
瞬间发现磁盘使用率达到了95%以上,铁定有问题了!
du -h -d 1 /
发现/var目录巨大无比!
du -h -t 10G /var
发现有几个/var/lib/docker/containers/xxxxxx的文件特别大,问了deepseek,得到的回答是:docker默认会将容器内应用产生的日志记录在json日志文件里,且默认没有大小限制!
查了下容器的id,嗯,这下对上了,确实是日志的问题!那就限定下日志的大小即可。
方案
全局配置
全局配置适用于所有之后新建的容器。
修改/etc/docker/daemon.json,添加日志限制:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
单容器配置
启动时通过参数直接限制:
docker run --log-opt max-size=10m --log-opt max-file=5 ...
docker-compose.yaml配置
使用docker compose时,可以在docker-compose.yaml里配置:
services:
your-service:
image: your-image
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
也可以使用yaml锚点避免重复配置:
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
services:
your-service1:
image: your-image1
logging: *default-logging
your-service2:
image: your-image2
logging: *default-logging
配置完执行docker compose up -d即可生效。