随机
Enter 搜索 ↑↓ 切换 Esc 清空

linux_uninstall_docker

脚本

安全卸载 Docker 及全部资源,自动清理镜像 / 容器 / 配置,支持交互确认与优雅退出。

linux_uninstall_docker

安全卸载 Docker 及全部资源,自动清理镜像 / 容器 / 配置,支持交互确认与优雅退出。

一键脚本

bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/linux_uninstall_docker.sh)

效果预览

执行脚本效果预览

脚本源码

#!/bin/bash
set -uo pipefail

list_color_init() {
    export gl_hui=$'\033[38;5;59m'
    export gl_hong=$'\033[38;5;9m'
    export gl_lv=$'\033[38;5;10m'
    export gl_huang=$'\033[38;5;11m'
    export gl_lan=$'\033[38;5;32m'
    export gl_bai=$'\033[38;5;15m'
    export gl_zi=$'\033[38;5;13m'
    export gl_bufan=$'\033[38;5;14m'
    export reset=$'\033[0m'
}
list_color_init

log_info()  { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok()    { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_warn()  { echo -e "${gl_huang}[警告]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }

break_end() {
    echo -e "${gl_lv}操作完成${gl_bai}"
    echo -e "${gl_bai}按任意键继续${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai} \c"
    read -r -n 1 -s -p ""
    echo ""
    clear
}

sleep_fractional() {
    local seconds=$1
    if sleep "$seconds" 2>/dev/null; then return 0; fi
    if command -v perl >/dev/null 2>&1; then perl -e "select(undef, undef, undef, $seconds)"; return 0; fi
    if command -v python3 >/dev/null 2>&1; then python3 -c "import time; time.sleep($seconds)"; return 0; fi
    if command -v python >/dev/null 2>&1; then python -c "import time; time.sleep($seconds)"; return 0; fi
    local int_seconds=$(echo "$seconds" | awk '{print int($1+0.999)}')
    sleep "$int_seconds"
}

handle_invalid_input() {
    echo -ne "\r${gl_huang}无效的输入,请重新输入! ${gl_zi}1 ${gl_bai}秒后返回"
    sleep_fractional 1
    echo -ne "\r${gl_lv}无效的输入,请重新输入! ${gl_zi}0 ${gl_bai}秒后返回"
    sleep_fractional 0.5
    echo ""
    return 2
}

exit_animation() {
    echo -ne "${gl_lv}即将退出 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
    sleep_fractional 0.5
    echo -ne "${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
    sleep_fractional 0.6
    echo ""
    clear
}

uninstall_docker_environment() {
    if ! command -v docker &>/dev/null; then
        echo -e ""
        echo -e "${gl_zi}>>> 卸载 Docker 环境${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
        echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
        log_warn "Docker 未安装,无需卸载"
        exit_animation
        return 1
    fi

	clear
    echo -e ""
    echo -e "${gl_zi}>>> 卸载 Docker 环境${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
    echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
    read -r -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载 Docker 环境吗?(${gl_lv}y${gl_bai}/${gl_hong}N${gl_bai}): ")" choice
    [ "$choice" = "0" ] && { exit_animation; return 1; }

    case "$choice" in
        [Yy])
            echo -e "${gl_zi}>>> 正在清理所有 Docker 资源${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
            echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
            
            log_info "正在停止所有容器${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
            docker stop $(docker ps -aq) >/dev/null 2>&1
            
            log_info "正在删除容器、镜像、网络、数据卷${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
            docker system prune -a --volumes -f >/dev/null 2>&1
            
            log_info "正在卸载 Docker 相关组件${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
            if command -v apt &>/dev/null; then
                apt remove -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose >/dev/null 2>&1
                apt autoremove -y >/dev/null 2>&1
            elif command -v yum &>/dev/null || command -v dnf &>/dev/null; then
                yum remove -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose >/dev/null 2>&1
            fi
            
            log_info "正在删除配置文件与残留目录${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
            rm -rf /etc/docker /var/lib/docker /var/run/docker.sock >/dev/null 2>&1
            hash -r
            
            echo -e ""
            log_ok "Docker 环境已完全卸载!"
            echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
            break_end
            ;;
        [Nn])
            log_info "已取消卸载操作"
            exit_animation
            return 0
            ;;
        *)
            handle_invalid_input
            return 1
            ;;
    esac
}

uninstall_docker_environment

创建本地脚本

new_script="new_test.sh"

cat > "$new_script" << 'EOF'
#!/bin/bash

# 粘贴脚本源码

EOF

# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"