配置 docker 日志驱动防磁盘溢出,需在 daemon.json 中设 json-file 驱动及 max-size(如"10m")和 max-file(如"3"),重启 docker 生效;可单容器用 --log-driver 与 --log-opt 覆盖;须配合集中日志系统与定期清理。

配置 Docker 容器日志驱动防止磁盘空间溢出,核心是限制单个容器日志文件大小和保留数量,避免日志无节制增长占满磁盘。默认的 json-file 驱动会持续追加日志到本地 JSON 文件,若不设限,几个月就可能吃掉几十 GB 空间。
全局配置日志驱动与限制(推荐)
在 Docker daemon 级别统一设置,所有新启动容器自动继承,避免逐个指定。编辑 /etc/docker/daemon.json(不存在则新建):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
说明:
-
max-size:单个日志文件最大体积,支持k、m、g单位(如"20m") -
max-file:最多保留几个日志文件轮转(含当前正在写的那个),超出后最老的被删除 - 配置后需执行
sudo systemctl reload docker或重启 Docker 服务生效
为单个容器覆盖日志配置
运行容器时用 --log-opt 覆盖全局设置,适合有特殊日志需求的服务(如调试期临时加大日志量):
docker run -d \ --log-driver json-file \ --log-opt max-size=50m \ --log-opt max-file=5 \ --name myapp nginx
注意:--log-driver 必须显式指定才允许使用 --log-opt;若只写 --log-opt 而没指定 driver,Docker 会忽略该选项。
检查与验证日志行为
确认配置是否生效:
- 查容器实际使用的日志驱动:
docker inspect myapp | grep -A 5 LogConfig - 查看日志文件路径:
docker inspect myapp | jq '.[].LogPath'(需安装 jq)或直接看输出中的LogPath字段,通常是/var/lib/docker/containers//-json.log - 手动触发日志滚动测试:用
docker logs myapp查看内容后,反复执行echo "test" | docker exec -i myapp tee /dev/stderr多次,再检查宿主机对应目录下是否出现-json.log.1、-json.log.2等轮转文件
其他实用建议
仅靠日志轮转还不够,还需配合运维习惯:
- 生产环境慎用
docker logs -f长时间挂起,它会持续占用内存缓存日志内容 - 避免在容器内直接写大量日志到
/var/log/xxx—— 这类日志不受 Docker 日志驱动控制,需单独清理或挂载外部日志卷 - 对高日志量服务(如 API 网关、消息队列),建议对接
syslog或fluentd等集中式日志系统,Docker 原生支持syslog、fluentd、gcplogs等驱动,可跳过本地存储环节 - 定期用
docker system df -v查看日志占用空间,结合du -sh /var/lib/docker/containers/*/*-json.log*定位异常大日志











