最直接有效的办法是给 docker 配置日志轮转策略,即通过 daemon.json 全局设置 max-size、max-file 和 non-blocking 模式,或在单容器中覆盖配置,并可选启用 compress 压缩;已存在大日志需 truncate 清空而非直接删除。

最直接有效的办法是给 Docker 配置日志轮转策略,核心就是限制单个日志文件大小 + 保留历史文件数量,避免 /var/lib/docker/containers/ 下的 *-json.log 文件无节制膨胀。
全局配置 daemon.json(一劳永逸)
修改 Docker 守护进程默认行为,让所有新建容器自动继承轮转规则:
- 编辑
/etc/docker/daemon.json(若不存在则新建) - 写入以下内容(示例值兼顾实用性与安全性):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5",
"mode": "non-blocking"
}
} -
max-size 控制单个日志文件上限(如
"10m"),超过即触发轮转
max-file 控制最多保留几个日志文件(含当前文件),比如"5"表示最多占 50MB/容器
mode: "non-blocking" 很关键:轮转时不会卡住应用输出,防止服务假死 - 保存后执行:
sudo systemctl daemon-reload && sudo systemctl restart docker - ⚠️ 注意:该配置只对重启 Docker 后新创建的容器生效;已运行的容器需重建(
docker rm -f && docker run...或docker-compose up -d)才生效
单容器覆盖配置(灵活适配重点服务)
对日志量特别大或稳定性要求极高的服务(如支付、实时计算),可在启动时单独加强限制:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 用
docker run启动时指定:docker run -d \<br> --log-driver json-file \<br> --log-opt max-size=5m \<br> --log-opt max-file=10 \<br> --log-opt mode=non-blocking \<br> --name my-app \<br> my-image:latest
- 在
docker-compose.yml中配置:
services:
app:
image: my-image:latest
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "10"
mode: "non-blocking" - 这种写法会覆盖全局配置,适合精细化管控
额外建议:启用压缩节省空间
如果磁盘资源特别紧张,可加上 "compress": "true"(支持 gzip 压缩归档日志):
- 加在
daemon.json的log-opts里,或单容器的--log-opt compress=true - 压缩后的旧日志文件后缀为
.log.1.gz等,能显著降低存储占用 - 注意:压缩会略微增加 CPU 开销,但对绝大多数业务影响极小
别忘了清理已有“僵尸日志”
配置生效前,很可能已有几十 GB 的旧日志堆积。不能直接 rm 正在写的 -json.log 文件(会导致 inode 占用不释放),正确做法是:
- 先停掉对应容器:
docker stop <container></container> - 清空日志文件内容:
truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log</id></id> - 再启动容器:
docker start <container></container> - 或者用脚本批量清理已停止容器的日志(确保容器状态为
exited再操作)










