====== Docker恢复初始状态 ====== ``` bash <(curl -sSL 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 "=============================================" ```