在日常开发过程中docker容器可能会有很大的日志占用空间,尝尝需要定期清理。下面提供查看容器日志大小和清理日志的一种解决方式
效果图
查看容器日志
bash docker_log_size.sh
清理日志
bash docker_clean_logs.sh
脚本
- docker_log_size.sh
#!/bin/bash# 获取所有正在运行的容器ID
containers=$(docker ps -q)# 打印表头
printf "%-30s %-15s %s\n" "容器名称" "日志文件大小" "日志文件路径"
echo "-----------------------------------------------------------"# 循环遍历每个容器ID
for container in $containers; do# 获取容器名称container_name=$(docker inspect --format='{{.Name}}' $container | sed 's/^\///')# 获取容器的日志文件路径log_path=$(docker inspect --format='{{.LogPath}}' $container)# 获取日志文件大小log_size=$(du -h $log_path 2>/dev/null | awk '{print $1}')# 输出容器名称、日志文件大小和路径if [ -n "$log_size" ]; thenprintf "%-30s %-15s %s\n" "$container_name" "$log_size" "$log_path"fi
done | sort -k2 -hr
- docker_clean_logs.sh
#!/bin/bash# 显示菜单选项
echo "请选择操作:"
echo "1. 全量清理所有容器日志"
echo "2. 清理指定容器日志(输入容器ID或名称,多个容器间用逗号隔开)"
read -p "输入选项编号(1或2): " choice# 清理日志的函数
clean_logs() {for container in $1; do# 获取容器的日志文件路径log_path=$(docker inspect --format='{{.LogPath}}' $container 2>/dev/null)# 判断日志路径是否存在if [ -f "$log_path" ]; thenecho "清理容器日志:$container (路径: $log_path)"cat /dev/null > "$log_path" # 清空日志文件内容elseecho "无法找到容器 $container 的日志文件,跳过..."fidone
}if [ "$choice" -eq 1 ]; then# 选项1:清理所有容器日志containers=$(docker ps -q)clean_logs "$containers"
elif [ "$choice" -eq 2 ]; then# 选项2:清理指定容器日志read -p "请输入容器ID或名称(多个容器间用逗号隔开): " input# 将输入的容器名称或ID转换为数组IFS=',' read -ra container_array <<< "$input"# 清理指定容器的日志clean_logs "${container_array[@]}"
elseecho "无效的选项编号,请重新运行脚本并选择正确的选项。"
fi
总结
大家根据自己需要修改,如有问题欢迎留言讨论。