**这是本文档旧的修订版!**
Docker恢复初始状态
这是一个能够彻底清理 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 "============================================="