核心是通过max-size和max-file限制单个容器日志体积与数量,防止磁盘耗尽;需显式指定json-file驱动,max-size设单文件上限(如10m),max-file设保留轮转数(如3),支持docker run和docker-compose配置,并可通过docker inspect及宿主机日志目录验证生效。

核心是限制单个容器日志的体积和数量,不让它无节制写入。默认的 json-file 驱动不设限,几天就可能涨到 GB 级别。
直接在启动时指定日志限制
这是最常用、最明确的方式,适用于关键服务或调试中需要差异化控制的场景:
- 必须显式声明
--log-driver json-file,否则--log-opt会被忽略 - 用
--log-opt max-size=10m控制单个日志文件上限(支持 k/m/g) - 用
--log-opt max-file=3表示最多保留 3 个轮转文件(含当前正在写的那个)
例如:
docker run -d \--log-driver json-file \
--log-opt max-size=20m \
--log-opt max-file=2 \
--name api-service \
my-api-image
在 docker-compose.yml 中配置
适合编排部署,配置清晰且可版本化:
- 在对应 service 下添加
logging区块 -
driver和options必须同级,max-size和max-file值加引号
示例:
services:backend:
image: myapp:v2
logging:
driver: "json-file"
options:
max-size: "15m"
max-file: "3"
验证是否生效
别只信配置,要确认实际行为:
- 查驱动与参数:
docker inspect 容器名 | grep -A 5 LogConfig - 看日志路径:
docker inspect 容器名 | jq '.[].LogPath'(或直接找输出里的LogPath字段) - 登录宿主机,进
/var/lib/docker/containers/xxx-xxx/目录,检查是否存在-json.log、-json.log.1等文件,且大小基本不超过max-size
其他实用补充
单容器控制之外,还需注意几个易踩坑点:
- 容器内应用自己往
/var/log/写日志,这部分不受 Docker 日志驱动管理,需挂载外部卷或用 logrotate 单独处理 - 临时救急清空日志:用
truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名),比rm安全 - 完全不需要日志的后台任务,可用
--log-driver none,但会丢失所有 stdout/stderr,慎用











