侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

Debian/Ubuntu完全卸载删除Docker

适用范围:通过 apt 安装的 Debian/Ubuntu Docker Engine。卸载软件与永久删除业务数据分开处理;Docker Desktop、Snap 和 rootless 安装需使用对应卸载流程。

一、确认安装来源和数据位置

卸载前先看实际安装了什么,记录容器、卷和 Docker 数据根目录:

dpkg-query -W -f='${Package}\t${Status}\n' docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker.io docker-compose docker-compose-v2 docker-buildx
sudo docker info --format '{{.DockerRootDir}}'
sudo docker ps -a
sudo docker volume ls
sudo systemctl status docker.service docker.socket containerd.service

未安装的包可能让 dpkg-query 返回非零,应逐项查看结果。Docker 官方 apt 仓库安装的包与 Debian/Ubuntu 自带 docker.io 不同;不要把所有名字里带 Docker 的包、目录和二进制都删掉。数据根目录也可能被 daemon.json 改到其他位置,默认的 /var/lib/docker 不能覆盖全部情况。

先备份需要的业务数据库、绑定挂载目录和命名卷,并确认能恢复。保存容器列表或镜像并不等于保存容器内全部数据;绑定挂载的数据不一定在 Docker 根目录里。

二、停止服务,卸载已安装的包

在确认可以中断现有容器业务后:

sudo systemctl stop docker.service docker.socket

如果使用 Docker 官方 apt 仓库,按照实际已安装的包选择下面列表:

sudo apt purge docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

containerd.io 可能还服务于其他工作负载,应先检查依赖、进程和数据用途,确认仅由这套 Docker 使用时再卸载:

apt-cache rdepends --installed containerd.io
sudo apt purge containerd.io

若安装的是发行版 docker.io,卸载自己查到的对应包,不同时套用一整组不相关包名。不自动执行 apt autoremove -y;先查看将删除的依赖是否还有其他用途。Docker Ubuntu 卸载说明、Debian 卸载说明

三、数据默认保留;确实要清空时另行处理

apt 卸载不会自动删除镜像、容器、卷和自定义配置,这是官方定义的行为。保留数据通常利于恢复或重装。如果目的只是重装 Engine,完成上一步即可,先不要删除数据目录。

只有确认备份可用、实际数据根目录就是 /var/lib/docker,且不再需要其中任何容器、镜像和命名卷时,才执行以下永久删除:

sudo rm -rf -- /var/lib/docker

自定义 data-root 必须逐字核对其绝对路径和挂载状态后单独处理,不能把从配置读取的字符串未经检查拼进递归删除命令。/var/lib/containerd 也可能保存 Docker 以外的镜像与工作负载,本文不提供无条件删除它的命令。业务绑定挂载目录不会由上面的删除自动清空,也不应为了“完全卸载”去全盘删除。

四、清理 apt 仓库与配置

先检查自己安装时创建的 Docker 源文件、keyring 和 /etc/docker/daemon.json:

ls -l /etc/apt/sources.list.d/docker.sources /etc/apt/sources.list.d/docker.list
ls -l /etc/apt/keyrings/docker.asc /etc/apt/keyrings/docker.gpg

当前官方安装流程使用 docker.sources 与 docker.asc,旧安装可能采用 .list 或 .gpg。只移除已确认属于该安装、且不再被其他源引用的具体文件;配置在备份后按实际需要清理。不要用 find / -name '*docker*' -exec rm ...、通配 purge 或不加判断的 killall。

最后执行 sudo apt update 并检查相关包和服务状态。systemctl 可能显示卸载后的单元不存在,这是需要判断的结果;它不证明业务数据已经删除。卸载是否成功与数据是否保留,要分开记录。

0

评论区