本文目录导读:

在Shell脚本中清理退出的容器实例,可以使用以下几种方法:
清理已退出的容器
#!/bin/bash # 方法1:使用docker rm命令 docker rm $(docker ps -aq -f status=exited) # 方法2:使用docker container prune docker container prune -f # 方法3:带条件过滤 docker rm $(docker ps -aq --filter "status=exited" --filter "status=dead")
完整的清理脚本
#!/bin/bash
echo "开始清理退出的容器..."
# 方法1:直接清理所有退出的容器
echo "清理所有已退出的容器..."
docker rm $(docker ps -aq -f status=exited) 2>/dev/null
# 方法2:安全的清理方式(检查是否有要清理的容器)
EXITED_CONTAINERS=$(docker ps -aq -f status=exited)
if [ -n "$EXITED_CONTAINERS" ]; then
echo "找到以下退出的容器:"
docker ps -a -f status=exited
echo "正在清理..."
docker rm $EXITED_CONTAINERS
echo "清理完成!"
else
echo "没有需要清理的退出容器。"
fi
# 方法3:使用prune命令(推荐)
echo "使用prune命令清理..."
docker container prune -f --filter "until=24h" # 清理24小时前的容器
echo "清理操作完成!"
带错误处理的脚本
#!/bin/bash
set -e # 遇到错误立即退出
cleanup_exited_containers() {
local containers=$(docker ps -aq -f status=exited 2>/dev/null)
if [ $? -ne 0 ]; then
echo "错误:Docker命令执行失败"
return 1
fi
if [ -z "$containers" ]; then
echo "没有退出的容器需要清理"
return 0
fi
echo "发现以下退出的容器:"
docker ps -a -f status=exited --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
echo "正在清理..."
if docker rm $containers; then
echo "成功清理了 $(echo $containers | wc -w) 个容器"
return 0
else
echo "清理过程中发生错误"
return 1
fi
}
# 主函数
main() {
echo "=== 容器清理工具 ==="
echo "开始时间:$(date)"
echo "-------------------"
cleanup_exited_containers
echo "-------------------"
echo "完成时间:$(date)"
}
# 执行主函数
main
更高级的清理策略
#!/bin/bash
# 更全面的Docker清理脚本
cleanup_docker() {
echo "=== Docker清理工具 ==="
# 1. 清理退出的容器
echo "1. 清理退出容器..."
docker container prune -f
# 2. 清理悬空的镜像
echo "2. 清理悬空镜像..."
docker image prune -f
# 3. 清理未使用的网络
echo "3. 清理未使用网络..."
docker network prune -f
# 4. 清理未使用的数据卷
echo "4. 清理未使用数据卷..."
docker volume prune -f
# 5. 综合清理(清理所有未使用的资源)
echo "5. 综合清理..."
docker system prune -a -f --volumes
echo "=== 清理完成 ==="
}
# 带确认的清理
confirm_and_cleanup() {
echo "警告:此操作将删除所有未使用的Docker资源!"
read -p "是否继续?(y/n): " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
cleanup_docker
else
echo "操作已取消"
fi
}
# 根据参数执行不同级别的清理
case "${1:-all}" in
"containers")
docker container prune -f
;;
"images")
docker image prune -f
;;
"all")
confirm_and_cleanup
;;
"force")
cleanup_docker
;;
*)
echo "用法:$0 [containers|images|all|force]"
exit 1
;;
esac
定时清理的脚本
#!/bin/bash
# 定时清理退出的容器(可与crontab配合使用)
# crontab示例:0 3 * * * /path/to/this/script.sh
cleanup_log="/var/log/docker-cleanup.log"
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$cleanup_log"
}
cleanup_containers() {
local BEFORE_CLEAN=$(docker ps -aq -f status=exited | wc -l)
if [ $BEFORE_CLEAN -gt 0 ]; then
log_message "开始清理 $BEFORE_CLEAN 个退出的容器"
docker rm $(docker ps -aq -f status=exited) 2>/dev/null
log_message "清理完成"
else
log_message "没有需要清理的容器"
fi
}
log_message "开始清理任务"
cleanup_containers
log_message "清理任务结束"
使用说明
-
直接使用命令:
# 定时执行 docker rm $(docker ps -aq -f status=exited)
-
保存脚本:
chmod +x cleanup.sh ./cleanup.sh
-
添加到crontab:
# 每天凌晨3点执行清理 crontab -e 0 3 * * * /path/to/cleanup.sh
注意事项
- 清理前确保没有重要数据
- 使用
-f参数强制清理 - 建议先运行
docker ps -a查看当前状态 - 对于生产环境,建议使用
docker container prune而非直接删除
选择哪种方法取决于你的具体需求,推荐使用 docker container prune 命令,因为它更安全且易于使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播