用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环境

发表回复

本站承接,网站推广(SEM,SEO);软件安装与调试;服务器或网络推荐及配置;APP开发与维护;网站开发修改及维护; 各财务软件安装调试及注册服务(金蝶,用友,管家婆,速达,星宇等);同时也有客户管理系统,人力资源,超市POS,医药管理等;

立即查看 了解详情