如何从Windows子系统中删除Docker?

我尝试在Windows子系统中为Ubuntu 安装Docker CE,但是我遇到了一些问题,无法正常工作。我发现也许Docker在WSL中不起作用,所以现在我正在尝试将其删除。

我已经成功从apt中删除了GPG密钥和Docker repo,但是当我尝试删除Docker包时,出现以下错误:

~ sudo apt-get --purge remove docker-ce 读取软件包列表... 完成 构建依赖关系树 读取状态信息... 完成 将卸载以下软件包: docker-ce* 0 升级,0 新安装,1 个要卸载,4 个未升级。 1 个未完全安装或卸载的软件包。 此操作后,将释放 85.4 MB 的磁盘空间。 是否继续?[Y/n] Y (正在读取数据库 ... 目前已安装 36248 个文件和目录。) 正在卸载 docker-ce (5:18.09.6~3-0~ubuntu-bionic) ... invoke-rc.d: 无法确定当前运行级别 * 正在停止 Docker:docker start-stop-daemon: 警告:无法杀死 4129:没有这样的进程 在 '/var/run/docker-ssd.pid' 中找不到正在运行的进程;未杀死任何进程。 invoke-rc.d: initscript docker, action "stop" 失败。 处理软件包 docker-ce (--remove)时出错: 安装 docker-ce 软件包的预删除脚本子进程返回错误的退出状态 1 清理时出现错误: 安装 docker-ce 软件包的后安装脚本子进程返回错误的退出状态 1 处理时遇到错误: docker-ce E: 子进程 /usr/bin/dpkg 返回了一个错误代码 (1)

1“docker daemon” 在 WSL 中不起作用,但在将来的版本中,它将在 Linux 内核运行。但是 docker 客户端现在可以在 WSL 中正常工作,并且可以连接到远程 docker daemon(例如在虚拟机中)。 - Biswapriyo
1个回答

不知怎么的,/var/run/docker-ssd.pid文件确定了一个进程ID,该进程要么未能启动,要么在没有清理文件的情况下被终止。
无论是怎样发生的,删除这个文件使得清理工作能够完成。
~ sudo rm /var/run/docker-ssd.pid

~ sudo apt-get --purge remove docker-ce
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  docker-ce*
0 upgraded, 0 newly installed, 1 to remove and 4 not upgraded.
1 not fully installed or removed.
After this operation, 85.4 MB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 36058 files and directories currently installed.)
Removing docker-ce (5:18.09.6~3-0~ubuntu-bionic) ...
invoke-rc.d: could not determine current runlevel
 * Docker already stopped - file /var/run/docker-ssd.pid not found.
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
(Reading database ... 36048 files and directories currently installed.)
Purging configuration files for docker-ce (5:18.09.6~3-0~ubuntu-bionic) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.21) …

~ docker
zsh: command not found: docker

一个有趣的侧面说明:也许问题实际上并不在于WSL。看起来其他人也遇到了类似的问题,并且能够解决它们。请参阅Docker for Linux GitHub问题#52:apt在Windows子系统上的Linux上失败时的软件包修改