他的回复:
Docker 默认用的 json-file 日志驱动,会把容器 stdout/stderr 的日志写到宿主机文件:/var/lib/docker/containers/容器ID>/容器ID>-json.log所以日志涨得快的话,系统盘就是被它占满的。1. 先找出占空间的大户du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -rh | headdocker system df # 顺带看镜像、容器、卷的整体占用2. 应急清理:用截断,别直接 rm日志文件正被 dockerd 进程打开着,直接 rm 删掉文件,进程还占着文件句柄,磁盘空间并不会释放,还得重启 docker 才能腾出来。正确做法是截断文件:truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名或ID>)3. 给单个容器设上限(答案是:可以)docker run 时加上日志参数:docker run -d --log-opt max-size=10m --log-opt max-file=3 your-imagemax-size=10m:单个日志文件到 10MB 就轮转;max-file=3:最多保留 3 个文件,超了自动删最旧的。这样单个容器的日志最多占 30MB。注意两点:已在运行的容器改不了这个参数,只能删掉容器带参数重建(数据放在挂载卷里的话不会丢);用 compose 的话在 service 下写:logging: driver: json-file options: max-size: "10m" max-file: "3"4. 一劳永逸:改 daemon.json 全局默认/etc/docker/daemon.json 里加:{ "log-opts": { "max-size": "10m", "max-file": "3" }}然后 systemctl restart docker。只对重启后新建的容器生效。5. 治本如果日志涨得快,先看看应用是不是在刷无意义的 debug 日志,把应用日志级别调上去;业务日志建议写进挂载的数据卷或发到日志服务,别全走容器 stdout。