一、引言:为什么需要彻底卸载 Docker?
在软件开发和运维过程中,Docker 作为容器化技术的核心工具被广泛使用。然而,当需要升级 Docker 版本、切换容器引擎(如转向 Podman)或清理系统资源时,不完全卸载 Docker 可能导致残留文件占用磁盘空间、配置冲突或版本兼容性问题。例如,残留的 /var/lib/docker 目录可能占用数十 GB 空间,未清理的网络规则可能干扰新容器网络,注册表项残留可能导致重装 Docker 时出现'已安装'错误。本文将从基础卸载到深度清理,提供跨操作系统(Linux、Windows、macOS)的完整方案,确保 Docker 及其组件被彻底移除。
二、卸载前准备:数据备份与风险评估
2.1 关键数据备份
在卸载前,需确认是否保留容器、镜像、卷或配置文件:
- 容器与镜像:使用
docker save -o images.tar <镜像名>导出重要镜像,docker export -o container.tar <容器 ID>导出容器文件系统。 - 卷数据:Docker 卷默认存储在
/var/lib/docker/volumes/(Linux)、C:\ProgramData\Docker\volumes\(Windows)或~/Library/Containers/com.docker.docker/Data/vms/0/(macOS),需手动备份关键卷目录。 - 配置文件:备份
/etc/docker/daemon.json(Linux)、~/.docker/config.json(用户配置)等文件,避免误删自定义配置。
2.2 风险提示
- 数据丢失风险:未备份的容器、镜像和卷将被永久删除,卸载前务必确认无需保留数据。
- 系统稳定性风险:手动删除核心目录(如
/var/lib/docker)或修改注册表可能导致系统异常,建议严格按照步骤操作。 - 依赖影响:若其他工具(如 Kubernetes、CI/CD 流水线)依赖 Docker,卸载后需同步更新相关配置。
三、跨操作系统卸载步骤
3.1 Linux 系统(Ubuntu/Debian)
3.1.1 停止 Docker 服务与进程
首先停止 Docker 相关服务,避免卸载时文件被占用:
# 停止 Docker 服务
sudo systemctl stop docker docker.socket containerd.service
# 确认服务已停止
sudo systemctl status docker
# 应显示"inactive"
3.1.2 移除 Docker 包
使用 apt 彻底卸载 Docker 组件,包括引擎、CLI、容器运行时等:
# 卸载 Docker 包
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin
# 自动清理未使用依赖
sudo apt autoremove -y
3.1.3 删除残留文件与目录
Docker 的核心数据、配置和日志文件不会随包管理器自动删除,需手动清理:

