如何在 Windows 上卸载 Docker Desktop
Docker Desktop 自带的卸载器会连同应用一起删掉本地的容器、镜像和卷。卸载前先导出需要的内容并确认能恢复。这份指南覆盖用 Docker.DockerDesktop winget 包按机器安装的 Docker Desktop。移除应用不会取消付费的 Docker 订阅,也不会删掉你的 Docker 账号。
先退出 Docker Desktop
从托盘图标退出 Docker Desktop,它还会在开机时启动一个后台启动器。卸载前在任务管理器(Ctrl+Shift+Esc)里确认没有 Docker Desktop.exe 还在。
用自带的卸载器移除应用
打开「设置 › 应用 › 已安装的应用」,找到 Docker Desktop,选择卸载,或者运行:
winget uninstall --id Docker.DockerDesktop
Docker 的卸载说明也记录了直接用安装程序带卸载参数运行的方法,并提到容器、镜像和卷会跟应用一起被删除。
删数据前先备份
在运行任何一种卸载方式之前,先导出或备份需要的卷和数据库,并确认能恢复。Docker Desktop 自己的虚拟磁盘(容器、镜像和卷都存在里面)会跟应用一起被删掉。
数据分别在哪里
| 位置 | 里面是什么 | 如何处理 |
|---|---|---|
%ProgramData%\DockerDesktop |
Desktop 的机器级设置 | 卸载器会删掉 |
%APPDATA%\Docker |
Desktop 的用户级设置 | 想保留先备份,用不到 Docker Desktop 了再删 |
%LOCALAPPDATA%\Docker\log |
Desktop 的日志 | 可以放心移除 |
%USERPROFILE%\.docker |
命令行配置、上下文和凭据设置 | 还有其他兼容 Docker 的命令行工具或客户端在用就留着 |
%LOCALAPPDATA%\Docker\wsl 下的虚拟磁盘 |
容器、镜像和卷 | 先备份,只有 Docker 自己的卸载器会删它 |
检查结果
应用移除后运行下面几条只读命令:
Get-Process "Docker Desktop" -ErrorAction SilentlyContinue
winget list --id Docker.DockerDesktop
Test-Path "$env:ProgramFiles\Docker\Docker"
Test-Path "$env:APPDATA\Docker"
Test-Path "$env:USERPROFILE\.docker"
wsl --list --verbose
Get-Process没有输出只表示未观察到匹配进程,被忽略的查询错误不能当作已经退出。列出进程,说明它或某个辅助进程还在运行。winget list正常完成且没有匹配,才说明包记录已经没了;列出一行,说明卸载没完成。Test-Path "...\Docker\Docker"返回False,说明程序目录已经没了。Test-Path "...\Docker"和Test-Path "...\.docker"返回True,说明对应的设置和命令行配置还在这台电脑上,只要你没有自己删掉,这就是正常的。wsl --list --verbose列出docker-desktop或docker-desktop-data,说明 Docker 的 Windows 子系统发行版和里面的虚拟磁盘还在。
用 winget 安装时
winget uninstall 运行的是「设置 › 应用」用的同一个卸载器,删的是同一批程序文件,它不会主动动 %USERPROFILE%\.docker 或 %LOCALAPPDATA%\Docker\wsl 下的虚拟磁盘。
Mole 会列出什么
对按机器安装的 winget 版 Docker Desktop:
- 程序目录、
%ProgramData%\DockerDesktop和桌面快捷方式默认勾选。 %APPDATA%\Docker会列出,但默认不勾选。%LOCALAPPDATA%\Docker\log默认勾选。%USERPROFILE%\.docker永远不会列出,因为其他命令行工具和兼容 Docker 的客户端也在用它。%LOCALAPPDATA%\Docker\wsl下的虚拟磁盘,也就是容器、镜像和卷所在的地方,永远不会列出。先备份,再用 Docker 自己的卸载器移除。- 卸载器有时会在 Program Files 下留一个空文件夹,会被保留,不会提供移除。
这次检查覆盖了什么
测试的是通过 winget 按机器安装的 Docker Desktop 4.91.0。Docker Desktop 的后台服务和 Windows 子系统没有在测试环境里启动起来,所以退出正在运行的实例和它的进程列表没有测试到。它的开机启动项在卸载前被正确看到、卸载后确认消失,卸载审查列表和移除列出项都测试过,结果干净。
