清空容器日志需用 truncate 或重定向清空 *-json.log 文件内容而非删除文件;可通过 docker inspect 或 find 定位路径;推荐配合 max-size 和 max-file 日志轮转策略防复发。

清理容器运行时产生的历史日志文件,核心是清空 *-json.log 文件内容,而不是删除文件本身——因为 Docker 进程仍在写入该文件,直接删会导致空间不释放、日志写入失败。
定位日志文件路径
每个容器的日志默认存放在宿主机的:/var/lib/docker/containers/<container-id>/<container-id>-json.log</container-id></container-id>
可通过以下任一方式确认:
- 查指定容器的 LogPath:
docker inspect --format='{{.LogPath}}' - 批量查找所有日志文件:
find /var/lib/docker/containers/ -name "*-json.log" - 查看各日志大小(便于识别大日志):
du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -hr | head -10
安全清空单个容器日志
推荐使用 truncate 或重定向方式,不中断容器运行:
- 用 truncate(最稳妥):
sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' ) - 用重定向:
sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" )' - 手动操作(需 root):
sudo tee /var/lib/docker/containers/xxx/xxx-json.log
批量清理所有容器日志
适合运维批量处理,建议加 sudo 并谨慎执行:
- 一行命令清空全部:
sudo find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \; - 带提示的脚本式清理(更可控):
#!/bin/bash
logs=$(find /var/lib/docker/containers/ -name "*-json.log")
for log in $logs; do
echo "Clearing $log"
sudo truncate -s 0 "$log"
done
长期防复发:配置日志轮转
仅清空是治标,必须配合限制策略才能避免反复堆积:
- 启动单个容器时加参数:
--log-opt max-size=50m --log-opt max-file=3 - 全局生效(修改
/etc/docker/daemon.json):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
保存后执行:sudo systemctl reload docker - Compose 文件中配置:
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "3"











