Docker 日志配置优化——避免磁盘空间被日志占满
最近在 Docker 上部署了 Quickwit 全文检索服务,运行一段时间后发现服务器磁盘空间接近满载。然而,经过检查容器自身以及挂载的卷(volume)的占用情况,并未发现异常:
docker ps -s b432fd6e33b8 quickwit/quickwit:latest "quickwit run" 18 hours ago Up 18 hours 127.0.0.1:7280-7281->7280-7281/tcp quickwit 0B (virtual 297MB)
同时,通过 docker stats
查看容器资源使用情况也没有发现问题:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS b432fd6e33b8 quickwit 0.38% 1.748GiB / 5GiB 34.97% 478kB / 32.3MB 242kB / 0B 98
问题分析
经过进一步排查,最终发现问题的根源在于容器的日志输出。由于 Quickwit 服务访问量较大,每次写入和检索请求都会在控制台打印大量日志,导致容器日志文件累计写入达到了 14G。虽然容器和数据卷本身的占用并不高,但不断增长的日志文件却悄然占满了磁盘空间。
解决方案:日志截断配置
为防止日志无限制增长,可以通过配置 Docker 日志驱动的相关选项来限制日志文件的大小和数量。以下提供了三种常见的配置方式:
1. 全局配置(修改 /etc/docker/daemon.json
文件)
修改 Docker 守护进程的配置文件,添加如下内容:
{ "log-driver": "json-file", "log-opts": { "max-size": "1m", "max-file": "1" } }
配置说明:
max-size:指定单个日志文件的最大大小(这里设置为 1MB)。
max-file:指定保留的日志文件数量。设置为 1 表示只保留正在写入的日志文件,若为 2 或更多,则会保留额外的备份文件,超出设置数量的旧文件将自动删除。
修改后,重启 Docker 服务使配置生效。
2. 使用 Docker Compose 配置
如果是通过 docker-compose.yaml
部署服务,可以在对应服务下增加日志配置:
services:
quickwit:
image: quickwit/quickwit:latest
command: quickwit run
ports:
- "7280-7281:7280-7281"
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
这样,每个服务容器的日志均会按照指定的大小和数量进行截断管理。
3. 使用 docker run
命令参数
如果直接通过 docker run
命令运行容器,则可在命令中加入日志选项参数,例如:
docker run --log-opt max-size=1m --log-opt max-file=1 quickwit/quickwit:latest quickwit run
总结
通过合理配置 Docker 日志选项,可以有效防止日志文件无限制增长,避免因日志占用过多磁盘空间而影响服务器稳定性。根据具体的部署方式(全局、Compose 或命令行),选择合适的日志管理策略,是日常运维中的一项重要工作。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小白