Docker 容器日志文件过大
Docker 容器写入大量日志,耗尽磁盘空间,导致其他容器无响应。
重启后 Docker 无法启动。
通过 df -h
命令发现 /dev/sda2
分区空间耗尽,进入到当前分区挂载点,依次进入磁盘占用较大的目录,通过 du -h -x --max-depth=1
发现是 clash
容器(/var/lib/docker/containers/<container ID>
)占用了剩余所有磁盘空间,进入容器目录通过 ls -l
查看发现容器日志文件<container ID>-json.log
占用很大,删除日志文件后 Docker 启动成功。
通过参考 Docker 官方文档 ,我们可以通过配置日志驱动来限制日志的行为。
Docker 日志驱动
Docker 默认使用 json-file 日志驱动,将容器的日志写入当前容器目录下的 JSON
文件中。
默认情况下,不执行日志轮转。因此,默认 json-file
日志驱动存储的日志文件可能会越来越大,使用大量磁盘空间,从而导致磁盘空间耗尽。
配置 Docker 日志驱动
可以通过如下两种方式来配置日志驱动,限制其行为。
配置默认日志驱动
可以通过配置(新增/修改)
/etc/docker/daemon.json
文件来告诉 Docker 守护进程使用指定的日志驱动:1
2
3{
"log-driver": "json-file"
}通过
log-opts
选项来配置日志驱动:1
2
3
4
5
6
7{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}max-size
指定单个日志文件大小为10M
,max-file
表示最多允许创建 3 个日志文件。重启 Docker 守护进程来生效配置:
1
2systemctl daemon-reload
systemctl restart docker配置只对新创建的容器生效。现有容器不会自动使用新的日志配置。
为指定的容器配置日志驱动
当启动容器时,可以使用
--log-driver
来指定当前容器使用的日志驱动。如果日志驱动有可配置选项,可以使用--log-opt <NAME>=<VALUE>
来设置驱动。以下示例使用
none
日志记录驱动程序启动Alpine
容器:1
docker run -it --log-driver none alpine ash
限制日志大小和文件数量:
1
docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash
查看容器 是否生效
1 | docker inspect --format='{{json .HostConfig.LogConfig}}' 你的容器名称 |