如何从 WSL 中删除 Docker 发行版?

Tom*_*ora 7 windows-10 docker-for-windows wsl2

我已经在 Windows 10 上安装了 Docker Desktop 和 Ubuntu 20.04 [Microsoft Store],并看到我有三个发行版 [如下],但我想摆脱 和docker-desktopdocker-desktop-data因为我不需要这么多并且想使用它们Ubuntu-20.04仅适用于我的 Docker 实验:

PS $ wsl -l -v

  NAME                    STATE           VERSION
  Ubuntu-20.04            Running         2
  docker-desktop-data     Running         2
  docker-desktop          Running         2
Run Code Online (Sandbox Code Playgroud)
  • 我知道docker-desktop-data包含图像并docker-desktop包含 Docker 基础设施,但我仍然不清楚并且感到困惑

我如何删除这些以及我需要它们吗?

Not*_*1ds 7

我昨天在 Stack Overflow 上的评论中提到了这一点,但我现在有机会尝试一下,它按预期工作......

Docker 引擎将在单个 WSL2 实例中运行得很好(有一个已知的警告,请参阅下面的解决方法),听起来这就是您真正想要的。

Docker Desktop 确实在基本 Docker 引擎的基础上提供了一些附加功能:

  • 它可以在多个 WSL2 实例之间共享
  • 它可以从 PowerShell 和 CMD 运行
  • 它提供了容器和卷的 GUI 仪表板
  • 它处理自动升级(尽管有些人可能认为这不一定是一个优势)
  • 这是一种方便的方法,可以自动为您处理以下所有其他内容。

如果您不需要这些功能,那么:

  • 备份现有 Docker Desktop 安装中的所有卷和映像
  • 卸载 Docker Desktop(引用的两个docker-desktop.*实例将被删除)
  • 可选,但建议:重新启动 Windows,或至少wsl --shutdown
  • 按照正常说明在 Ubuntu 实例中安装 Docker Engine 。出于本答案的目的,请使用“从包安装”并暂时执行步骤 1 和 2。该docker run示例还无法运行。
  • 正常的 Docker 包安装将尝试启动守护进程,但这在 WSL 上不起作用,因为没有运行级别、启动脚本、systemd 等概念。您需要通过 手动启动它sudo service docker start
  • 现在您可以运行该示例sudo docker run --rm hello-world(为什么 Docker 文档中没有该示例--rm对我来说毫无意义)。并清理它sudo docker rmi hello-world(也应该是文档的一部分,恕我直言)。
  • 继续执行安装后步骤,让普通用户能够在没有sudo.

之后,Docker 文档中的下一步是使其能够在启动时运行。这在 WSL 上不起作用,因为没有“启动”的概念。因此,您需要一种替代方法来确保引擎在 WSL 下运行。当然,sudo service docker start当您需要时,这可以只是一本手册。或者,如果您愿意,您可以将类似以下内容添加到您的~/.bashrc

wsl.exe -u root -e sh -c "service docker status || service docker start"
Run Code Online (Sandbox Code Playgroud)

还有其他方法,但这只是一个示例。