如何在 Ubuntu 系统上完全移除 Docker 及其所有数据

在使用 Ubuntu 进行开发或学习时,Docker 是一个不可或缺的工具。但有时,你可能需要卸载它,例如:为了解决版本冲突、清理环境,或者准备进行全新的安装。仅仅通过 apt remove 命令并不能完全清除 Docker 留下的所有文件和数据。

本文将提供一份详尽的指南,帮助你在 Ubuntu 系统上彻底、干净地卸载 Docker,涵盖所有主流的安装方式。

写在前面:卸载前的准备

在开始卸载之前,请务必注意:

  • 数据备份 :卸载过程会删除所有 Docker 镜像、容器、卷和网络。这是一个不可逆的操作。如果你有任何需要保留的容器或数据卷,请确保提前备份。

  • 停止服务:首先停止所有正在运行的 Docker 容器和 Docker 服务本身。

    bash 复制代码
    # 停止所有正在运行的容器
    docker stop $(docker ps -aq)
    
    # 停止 Docker 服务
    sudo systemctl stop docker docker.socket containerd

第一步:确定你的 Docker 安装方式

选择正确的卸载方法至关重要。你可以通过以下命令快速判断:

  • 检查安装来源

    bash 复制代码
    # 如果是通过 Apt 安装,会显示包名(如 docker-ce)
    dpkg -l | grep docker
    
    # 如果是通过 Snap 安装,会显示 snap 包
    snap list | grep docker

接下来,请根据你的安装方式选择对应的卸载方法。


第二步:选择正确的卸载方法

方法一:卸载通过 Apt 安装的 Docker(最常见)

如果你是通过 Docker 官方仓库或 Ubuntu 仓库安装的,请使用此方法。

  1. 卸载 Docker 软件包

    使用 apt purge 命令不仅移除软件,还会删除配置文件。

    bash 复制代码
    sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  2. 删除所有 Docker 数据(关键步骤)

    这一步将永久删除所有镜像、容器和卷。如果你确定要清理一切,请执行:

    bash 复制代码
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    • /var/lib/docker 是 Docker 默认存储所有数据的核心目录。
  3. 清理残留配置(可选)

    删除 Docker 的 Apt 源列表文件,并自动移除不再需要的依赖包。

    bash 复制代码
    # 删除源列表(如果存在)
    sudo rm /etc/apt/sources.list.d/docker.list
    
    # 清理残留依赖
    sudo apt autoremove
方法二:卸载通过 Snap 安装的 Docker

如果你的安装命令包含 snap,那么卸载非常简单,一条命令即可搞定。Snap 会自动处理所有相关文件和依赖。

bash 复制代码
sudo snap remove docker
方法三:卸载使用官方脚本安装的 Docker

如果你曾经运行过 Docker 官方的便捷安装脚本(get-docker.sh),则需要手动卸载,步骤类似方法一:

  1. 删除二进制文件 :脚本安装的文件通常在 /usr/bin/ 目录下。

    bash 复制代码
    sudo rm -f /usr/bin/docker /usr/bin/dockerd /usr/bin/containerd /usr/bin/ctr ...
  2. 删除数据目录 :同方法一,删除 /var/lib/docker/var/lib/containerd

  3. 删除系统服务文件

    bash 复制代码
    sudo rm -f /lib/systemd/system/docker.service
    sudo rm -f /lib/systemd/system/containerd.service
    sudo systemctl daemon-reload  # 重新加载 systemd 配置

第三步:验证卸载是否成功

执行完卸载步骤后,最好验证一下是否已完全清除。

  1. 检查 Docker 命令:如果卸载成功,终端会提示"未找到命令"。

    bash 复制代码
    docker --version
    # 输出示例:Command 'docker' not found...
  2. 检查服务状态:系统应该不再识别 Docker 服务。

    bash 复制代码
    systemctl status docker
    # 输出示例:Unit docker.service could not be found.
  3. 检查数据目录:确认数据目录已被删除。

    bash 复制代码
    ls /var/lib/ | grep docker
    # 如果没有任何输出,说明目录已成功删除

总结

为了让你一目了然,整个卸载过程的精髓可以总结为以下流程图,它清晰地展示了不同安装方式对应的卸载路径:
Apt安装 Snap安装 官方脚本安装 开始卸载Ubuntu Docker 确定安装方式 卸载软件包
sudo apt purge ... 删除数据目录
sudo rm -rf /var/lib/docker 验证卸载结果 一条命令卸载
sudo snap remove docker 手动删除二进制文件
与数据目录 卸载完成

希望这篇指南能帮助你干净利落地完成 Docker 的卸载,为后续的操作扫清障碍。如果你在操作过程中遇到任何问题,欢迎在评论区留言讨论!

相关推荐
BD_Marathon1 小时前
【Zookeeper】客户端命令行——节点类型
linux·服务器·zookeeper
好奇的菜鸟2 小时前
WSL上的Ubuntu 24.04 (Noble Numbat) 配置阿里云镜像源,提速软件安装
linux·ubuntu·阿里云
海棠蚀omo2 小时前
Linux信号保存的核心:未决信号集与阻塞信号集——探秘内核如何实现信号的阻塞、暂存与派发
linux·操作系统
傲世(C/C++,Linux)3 小时前
Linux系统编程——TCP服务器
linux·服务器·tcp/ip
橘子真甜~5 小时前
C/C++ Linux网络编程8 - epoll + ET Reactor TCP服务器
linux·服务器·网络
万变不离其宗_85 小时前
centos 手动安装redis
linux·redis·centos
_lst_5 小时前
linux进程状态
linux·运维·服务器
稚辉君.MCA_P8_Java6 小时前
Gemini永久会员 归并排序(Merge Sort) 基于分治思想(Divide and Conquer)的高效排序算法
java·linux·算法·spring·排序算法
wanderist.6 小时前
Linux使用经验——离线运行python脚本
linux·网络·python