用Ubuntu脚本文件彻底清理Ubuntu服务器Docker环境
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
在各大云服务平台新开了一台云服务器后,经常发现被预装了一个不知道哪来的野鸡 docker 版本,还带个上古compose 神器。用也用不成,关键是卸也卸不掉。折腾了几次之后心态爆炸了,于是搞了个一劳永逸的清理脚本。
这个脚本将把服务器上的 Docker 环境,不管是docker-ce, docker.io, 还是 snap 安装的,也不管有什么镜像、容器、数据卷,统统能清理干净就清理干净!
理论适用于 Ubuntu 系统,在 Ubuntu 22.04 LTS Server 上测试运行。
警告!
在使用该脚本前,请知晓风险和后果:它会永久删除服务器上所有的 Docker 镜像、容器、数据卷和网络配置。请在也仅在以下情况使用:
你确定服务器上已存在的 Docker 相关数据全都不再需要了。
你把 Docker 环境装坏了,但还没有安装镜像,还忘记拍快照。故需要从头开始配置。
这是一台新服务器,你想干掉预装的奇葩 docker 环境,自己重装。
该脚本仅供个人开发者学习使用,请勿用于正式生产环境的运维。
正确食用方法:
将脚本拷贝至工作目录,使用sudo权限执行即可。
#!/usr/bin/env bash # ===================================================================================== # Docker 环境彻底清理脚本 # # 描述: # 1. 清理所有已知的 Docker 版本 (CE, IO, Snap) 及其相关组件。 # 2. 任何步骤的失败(如文件/软件包不存在)都不会中断整个脚本的执行。 # 3. 删除相关的配置文件、数据目录和用户配置。 # ===================================================================================== # 必须使用 sudo 运行 if [ "$EUID" -ne 0 ]; then echo "错误:此脚本必须使用 sudo 权限运行" echo "请使用: sudo $0" exit 1 fi # 危险操作确认 echo "================================================================" echo "警告:此脚本将永久删除 Docker 镜像、容器、卷和网络配置" echo "请在确定需要完全重置 Docker 环境的服务器上运行" echo "================================================================" echo "" read -p "您确定要继续执行吗?(y/N) " -n 1 -r echo "" if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "操作已取消" exit 0 fi echo "" echo "### 阶段 1: 停止 Docker 相关服务..." # 停止所有可能的服务,使用 || true 确保即使服务不存在也不会报错退出 systemctl stop docker.service docker.socket containerd.service || true systemctl disable docker.service docker.socket containerd.service || true echo "--- 阶段 1 完成 ---" echo "" echo "### 阶段 2: 卸载 Docker 相关软件包 (apt & snap)..." # 卸载所有已知的 Docker 相关包 # 使用 -y 自动确认,使用 || true 避免因找不到包而中断 apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras > /dev/null 2>&1 || true apt-get purge -y docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc > /dev/null 2>&1 || true snap remove docker > /dev/null 2>&1 || true echo "--- 阶段 2 完成 ---" echo "" echo "### 阶段 3: 删除残留目录和文件..." # 删除 Docker 相关目录和文件 rm -rf /var/lib/docker rm -rf /var/lib/containerd rm -rf /etc/docker rm -rf /var/run/docker.sock rm -rf /var/lib/buildkit rm -rf /root/.docker # 删除 systemd 配置文件 rm -rf /etc/systemd/system/docker.service.d # 删除 apt 源配置文件 rm -f /etc/apt/sources.list.d/docker.list rm -f /etc/apt/keyrings/docker.gpg echo "--- 阶段 3 完成 ---" echo "" echo "### 阶段 4: 清理系统依赖包并更新缓存..." apt-get autoremove -y > /dev/null 2>&1 apt-get autoclean > /dev/null 2>&1 apt-get clean > /dev/null 2>&1 echo "--- 阶段 4 完成 ---" echo "" echo "=========================================================" echo "### 验证: 检查 Docker 组件是否已移除" echo "=========================================================" echo "" # 初始化状态变量:0 表示已移除,1 表示仍存在 overall_status=0 docker_found=0 compose_v1_found=0 compose_v2_found=0 runtime_found=0 remaining_components=() echo "检查 docker 命令..." if command -v docker &> /dev/null; then echo ">> [存在] docker 命令位置: $(command -v docker)" docker_found=1 remaining_components+=("docker") else echo ">> [已移除] docker 命令未找到" fi echo "" echo "检查 docker-compose (v1) 命令..." if command -v docker-compose &> /dev/null; then echo ">> [存在] docker-compose 命令位置: $(command -v docker-compose)" compose_v1_found=1 remaining_components+=("docker-compose (v1)") else echo ">> [已移除] docker-compose 命令未找到" fi echo "" echo "检查 docker compose (v2) 插件..." # v2 插件依赖于 docker 主程序 if docker compose version &> /dev/null; then echo ">> [存在] docker compose 插件仍可执行" compose_v2_found=1 remaining_components+=("docker compose (v2)") else echo ">> [已移除] docker compose 插件不可用" fi echo "" echo "检查 containerd 和 runc..." if command -v containerd &> /dev/null || command -v runc &> /dev/null; then echo ">> [存在] containerd 或 runc 命令仍可找到" runtime_found=1 remaining_components+=("containerd/runc") else echo ">> [已移除] containerd 和 runc 命令未找到" fi # 检查是否有任何组件残留 if [ $docker_found -ne 0 ] || [ $compose_v1_found -ne 0 ] || [ $compose_v2_found -ne 0 ] || [ $runtime_found -ne 0 ]; then overall_status=1 fi echo "" echo "=========================================================" echo "### 清理结果总结" echo "=========================================================" if [ $overall_status -eq 0 ]; then echo "全部清除!所有关键的 Docker 组件均已从系统中移除。" echo "系统现在处于一个干净的状态。" else remaining_str=$(IFS=, ; echo "${remaining_components[*]}") echo "清理未完全!发现以下残留组件: [${remaining_str}]" echo "这可能是因为它们被手动安装在非标准路径下,或者由其他软件包管理。" echo "请根据上面的验证路径信息手动检查并删除。" fi echo "========================================================="
按照以上Ubuntu脚本就可以干掉野鸡docker版本,切勿在自己生产环境测试,免得挂了哦!
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!
赏
支付宝赞助
微信赞助


免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。
您必须遵守我们的协议,如您下载该资源,行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源 LaoLiang.Net部分资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。
敬请谅解! 侵权删帖/违法举报/投稿等事务联系邮箱:service@laoliang.net
意在交流学习,欢迎赞赏评论,如有谬误,请联系指正;转载请注明出处: » 用Ubuntu脚本文件彻底清理Ubuntu服务器Docker环境