使用 docker logs 和重定向清空日志(适用于多数容器):
- 以下脚本会遍历所有正在运行的Docker容器,并清空它们的日志文件。
bash
#!/bin/bash
containers=$(docker ps -q)
for container in $containers; do
docker logs $container > /dev/null 2>&1
done
- 脚本说明:
- docker ps -q 命令获取所有正在运行容器的ID,将其赋值给 containers 变量。
- for 循环遍历每个容器ID。
- docker logs $container > /dev/null 2>&1 这行代码中, docker logs 用于输出容器日志,通过重定向 > /dev/null 2>&1 将标准输出和标准错误输出都丢弃,从而达到清空日志的效果。
直接删除容器日志文件(需要知道日志驱动及路径,以默认 json - file 驱动为例):
- 对于使用默认 json - file 日志驱动的Docker容器,日志文件通常存储在
/var/lib/docker/containers/
bash
#!/bin/bash
containers=$(docker ps -q)
log_dir="/var/lib/docker/containers"
for container in $containers; do
log_file="$log_dir/$container/$container - json.log"
if [ -f "$log_file" ]; then
> "$log_file"
fi
done
- 脚本说明:
- 同样先获取所有正在运行容器的ID。
- 定义日志文件目录 log_dir 为
/var/lib/docker/containers 。
- 在 for 循环中,构建每个容器对应的日志文件路径 log_file 。
- if [ -f "$log_file" ]; then 判断日志文件是否存在,如果存在,使用 > "$log_file" 命令清空文件内容(这是一种在Bash中快速清空文件的方法,它创建一个新的空文件覆盖原文件内容)。
结合时间判断清理旧日志(以 json - file 驱动为例):
- 下面的脚本会删除7天前修改过的Docker容器日志文件(以 json - file 驱动为例)。
bash
#!/bin/bash
containers=$(docker ps -q)
log_dir="/var/lib/docker/containers"
days_to_keep=7
for container in $containers; do
log_file="$log_dir/$container/$container - json.log"
if [ -f "$log_file" ]; then
modification_time=$(stat -c %Y "$log_file")
current_time=$(date +%s)
time_difference=$(( (current_time - modification_time) / 86400 ))
if [ $time_difference -gt $days_to_keep ]; then
rm -f "$log_file"
fi
fi
done
- 脚本说明:
- 除了获取容器ID和定义日志目录,还定义了 days_to_keep 变量,表示需要保留日志的天数。
- 在 for 循环中,获取每个日志文件的修改时间 modification_time (通过 stat -c %Y 获取文件的时间戳)和当前时间 current_time (通过 date +%s 获取当前时间戳)。
- 计算时间差 time_difference ,单位为天。
- 如果时间差大于 days_to_keep ,则使用 rm -f 删除该日志文件。
将上述脚本保存为文件(如 clean_docker_logs.sh ),添加可执行权限( chmod +x clean_docker_logs.sh )后即可运行。请根据实际情况谨慎使用,特别是删除日志文件的操作,避免误删重要信息。