**这是本文档旧的修订版!**
Docker恢复初始状态
bash <(curl http://flush.119he.com/docker/docker-reset-to-factory.sh)
V1.1
在原有脚本基础上增加两个可选择的操作模式:一个是完整恢复初始状态(删除所有资源),另一个是保留镜像仅清理容器、网络、卷等其他资源,这样就不用重新拉取镜像了。
#!/bin/bash
set -euo pipefail
# 脚本名称:docker-reset-to-factory.sh
# 功能:灵活清理Docker环境,支持两种模式:
# 1. 完整恢复初始状态(删除所有容器、镜像、网络、卷等)
# 2. 保留镜像恢复(仅删除容器、网络、卷,保留镜像)
# 定义颜色输出函数
function echo_error() {
echo -e "\033[31m[ERROR] $1\033[0m"
}
function echo_warn() {
echo -e "\033[33m[WARN] $1\033[0m"
}
function echo_info() {
echo -e "\033[32m[INFO] $1\033[0m"
}
# 检查root权限
if [ "$(id -u)" -ne 0 ]; then
echo_error "该脚本需要以root权限运行,请使用 sudo 执行!"
exit 1
fi
# 检查Docker是否安装并运行
if ! command -v docker &> /dev/null; then
echo_error "未检测到Docker,请先安装Docker!"
exit 1
fi
if ! systemctl is-active --quiet docker; then
echo_warn "Docker服务未运行,正在启动Docker..."
systemctl start docker
sleep 3
fi
# 定义完整清理函数(删除所有资源)
function full_reset() {
echo_warn "============================================="
echo_warn "警告:该操作将彻底清理以下所有Docker资源:"
echo_warn " 1. 所有运行/停止的容器(包括数据卷)"
echo_warn " 2. 所有本地镜像"
echo_warn " 3. 所有自定义网络(保留默认网络)"
echo_warn " 4. 所有未使用的卷和构建缓存"
echo_warn "============================================="
read -p "确认要执行完整清理吗?(输入 YES 确认,其他任意键取消):" CONFIRM
if [ "$CONFIRM" != "YES" ]; then
echo_info "操作已取消!"
exit 0
fi
# 停止并删除所有容器
echo_info "正在停止所有运行中的容器..."
docker stop $(docker ps -aq) 2>/dev/null || echo_info "当前无运行中的容器"
echo_info "正在删除所有容器..."
docker rm -f $(docker ps -aq) 2>/dev/null || echo_info "当前无容器可删除"
# 删除所有镜像
echo_info "正在删除所有镜像..."
docker rmi -f $(docker images -aq) 2>/dev/null || echo_info "当前无镜像可删除"
# 删除自定义网络
echo_info "正在删除所有自定义网络..."
docker network rm $(docker network ls | grep -vE 'bridge|host|none' | awk 'NR>1 {print $1}') 2>/dev/null || echo_info "当前无自定义网络可删除"
# 删除所有卷
echo_info "正在删除所有卷..."
docker volume rm $(docker volume ls -q) 2>/dev/null || echo_info "当前无卷可删除"
# 清理缓存
echo_info "正在清理Docker缓存和未使用资源..."
docker system prune -af 2>/dev/null
# 重启Docker
echo_info "正在重启Docker服务..."
systemctl restart docker
echo_info "============================================="
echo_info "Docker已成功恢复到初始安装状态(所有资源已清理)!"
echo_info "============================================="
}
# 定义保留镜像清理函数(仅清理容器/网络/卷)
function reset_keep_images() {
echo_warn "============================================="
echo_warn "警告:该操作将清理以下Docker资源(保留镜像):"
echo_warn " 1. 所有运行/停止的容器(包括数据卷)"
echo_warn " 2. 所有自定义网络(保留默认网络)"
echo_warn " 3. 所有未使用的卷和构建缓存"
echo_warn " 4. 保留所有本地镜像文件"
echo_warn "============================================="
read -p "确认要执行保留镜像的清理吗?(输入 YES 确认,其他任意键取消):" CONFIRM
if [ "$CONFIRM" != "YES" ]; then
echo_info "操作已取消!"
exit 0
fi
# 停止并删除所有容器
echo_info "正在停止所有运行中的容器..."
docker stop $(docker ps -aq) 2>/dev/null || echo_info "当前无运行中的容器"
echo_info "正在删除所有容器..."
docker rm -f $(docker ps -aq) 2>/dev/null || echo_info "当前无容器可删除"
# 删除自定义网络
echo_info "正在删除所有自定义网络..."
docker network rm $(docker network ls | grep -vE 'bridge|host|none' | awk 'NR>1 {print $1}') 2>/dev/null || echo_info "当前无自定义网络可删除"
# 删除所有卷
echo_info "正在删除所有卷..."
docker volume rm $(docker volume ls -q) 2>/dev/null || echo_info "当前无卷可删除"
# 清理缓存(不删除镜像)
echo_info "正在清理Docker缓存和未使用资源(保留镜像)..."
docker system prune -af --filter "until=0h" 2>/dev/null
# 重启Docker
echo_info "正在重启Docker服务..."
systemctl restart docker
echo_info "============================================="
echo_info "Docker已清理完成(所有镜像已保留)!"
echo_info "============================================="
}
# 显示菜单并获取用户选择
echo_info "============================================="
echo_info "Docker 环境清理工具"
echo_info "============================================="
echo "请选择要执行的操作:"
echo "1. 完整恢复初始状态(删除所有容器、镜像、网络、卷)"
echo "2. 保留镜像清理(仅删除容器、网络、卷,保留镜像)"
echo "3. 退出"
echo_info "============================================="
read -p "请输入选项编号(1/2/3):" OPTION
# 根据选择执行对应函数
case $OPTION in
1)
full_reset
;;
2)
reset_keep_images
;;
3)
echo_info "已退出脚本,未执行任何操作。"
exit 0
;;
*)
echo_error "无效的选项!请输入 1、2 或 3。"
exit 1
;;
esac
V1.0
这是一个能够彻底清理 Docker 环境,将其恢复到刚安装完成时初始状态的 bash 脚本,这个脚本需要删除所有容器、镜像、网络、卷等 Docker 相关资源。
#!/bin/bash
set -euo pipefail
# 脚本名称:docker-reset-to-factory.sh
# 功能:彻底清理Docker环境,恢复到初始安装状态
# 定义颜色输出函数,提升交互体验
function echo_error() {
echo -e "\033[31m[ERROR] $1\033[0m"
}
function echo_warn() {
echo -e "\033[33m[WARN] $1\033[0m"
}
function echo_info() {
echo -e "\033[32m[INFO] $1\033[0m"
}
# 检查是否以root权限运行
if [ "$(id -u)" -ne 0 ]; then
echo_error "该脚本需要以root权限运行,请使用 sudo 执行!"
exit 1
fi
# 检查Docker是否安装并运行
if ! command -v docker &> /dev/null; then
echo_error "未检测到Docker,请先安装Docker!"
exit 1
fi
if ! systemctl is-active --quiet docker; then
echo_warn "Docker服务未运行,正在启动Docker..."
systemctl start docker
sleep 3
fi
# 安全确认步骤
echo_warn "============================================="
echo_warn "警告:该操作将彻底清理以下Docker资源:"
echo_warn " 1. 所有运行/停止的容器(包括数据卷)"
echo_warn " 2. 所有本地镜像"
echo_warn " 3. 所有自定义网络(保留默认网络)"
echo_warn " 4. 所有未使用的卷和构建缓存"
echo_warn "============================================="
read -p "确认要执行此操作吗?(输入 YES 确认,其他任意键取消):" CONFIRM
if [ "$CONFIRM" != "YES" ]; then
echo_info "操作已取消!"
exit 0
fi
# 步骤1:停止所有运行中的容器
echo_info "正在停止所有运行中的容器..."
docker stop $(docker ps -aq) 2>/dev/null || echo_info "当前无运行中的容器"
# 步骤2:删除所有容器(包括已停止的)
echo_info "正在删除所有容器..."
docker rm -f $(docker ps -aq) 2>/dev/null || echo_info "当前无容器可删除"
# 步骤3:删除所有镜像
echo_info "正在删除所有镜像..."
docker rmi -f $(docker images -aq) 2>/dev/null || echo_info "当前无镜像可删除"
# 步骤4:删除所有自定义网络(保留bridge、host、none等默认网络)
echo_info "正在删除所有自定义网络..."
docker network rm $(docker network ls | grep -vE 'bridge|host|none' | awk 'NR>1 {print $1}') 2>/dev/null || echo_info "当前无自定义网络可删除"
# 步骤5:删除所有卷(包括未使用的)
echo_info "正在删除所有卷..."
docker volume rm $(docker volume ls -q) 2>/dev/null || echo_info "当前无卷可删除"
# 步骤6:清理Docker构建缓存和未使用资源
echo_info "正在清理Docker缓存和未使用资源..."
docker system prune -af 2>/dev/null
# 步骤7:重启Docker服务确保配置生效
echo_info "正在重启Docker服务..."
systemctl restart docker
echo_info "============================================="
echo_info "Docker已成功恢复到初始安装状态!"
echo_info "============================================="