若需快速清理单个容器的日志,可通过以下步骤操作:
docker ps命令查看。/var/lib/docker/containers/),定位到该容器的日志文件(通常命名为<容器ID>-json.log)。truncate命令清空日志文件(推荐,不会影响正在运行的容器):sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
或使用重定向到空设备的方式(需停止容器,可能影响服务):docker stop <容器ID> && sudo sh -c "> /var/lib/docker/containers/<容器ID>/<容器ID>-json.log" && docker start <容器ID>
注:
truncate是更安全的选择,因为它不会删除文件,只是将文件大小置零,容器仍可继续写入日志。
若需清理所有容器的日志,可编写Shell脚本循环处理:
clean_docker_logs.sh):#!/bin/bash
LOG_PATH="/var/lib/docker/containers"
for log_file in $(find "$LOG_PATH" -name "*-json.log"); do
echo "清空日志文件: $log_file"
sudo truncate -s 0 "$log_file"
done
echo "所有容器日志清理完成。"
chmod +x clean_docker_logs.sh
sudo ./clean_docker_logs.sh
该脚本会遍历/var/lib/docker/containers/目录下所有以-json.log结尾的文件,并将其清空。为避免日志再次堆积,可通过cron定时任务定期执行清理脚本:
crontab -e
0 0 * * * /usr/local/bin/clean_docker_logs.sh
注:需将
clean_docker_logs.sh脚本路径替换为实际路径,并确保脚本有执行权限。
若需彻底解决日志无限增长问题,可通过限制容器日志大小,使日志自动轮转(保留指定数量和大小的历史日志):
docker run命令添加--log-opt参数,例如限制日志大小为500MB,保留3个历史文件:docker run --log-driver=json-file --log-opt max-size=500m --log-opt max-file=3 -d my-app
/etc/docker/daemon.json(若不存在则新建),添加以下内容:{
"log-driver": "json-file",
"log-opts": {
"max-size": "500m",
"max-file": "3"
}
}
保存后重启Docker服务使配置生效:sudo systemctl daemon-reload
sudo systemctl restart docker
注:此方法需在创建容器前配置,对已存在的容器无效,需重新创建容器。
cp /var/lib/docker/containers/<容器ID>/<容器ID>-json.log ~/logs_backup/)。sudo systemctl restart docker),但会影响所有运行中的容器。du -sh /var/lib/docker/containers/查看日志目录总大小,确认空间是否释放。