让社区 Docker 切换到 Windows 中的 Linux 容器(无需依赖 Docker Desktop)。

让社区 Docker 切换到 Windows 中的 Linux 容器(无需依赖 Docker Desktop)。

我有一个非常具体的 Docker/Windows 问题,有非常具体的限制。我希望我能找到一个确切的答案 (“不,这不可能。”, 或者“可以通过这些可重复的步骤来完成”

我需要在 Windows 上安装 Docker 的社区版(不是授权的 Docker Desktop,而是“原始”CLI)。

这可以在(已授权的)Docker Desktop 中使用随附的 DockerCli.exe 程序完成。例如:

PS> .\DockerCli.exe -SwitchLinuxEngine

需要从使用 Windows 容器切换到使用 Linux 容器(以便让 dockerd 提取并运行一些基于 Alpine 的自定义/旧版镜像。)如果不这样做,Windows 上的 Docker 会出现以下抱怨:

2020-09-18T03:30:24.0943834Z image operating system "linux" cannot be used on this platform

使用 Docker Desktop,这不是问题(只需使用 DockerCli.exe 来让守护进程切换容器策略。)

但是现在 Docker Desktop 需要许可证,所以这不是一个选项(或者不是一个首选选项)。

不幸的是,我找不到仅使用普通的 docker(通过直接发布或通过 Scoop 之类的方式安装)来切换容器策略的方法。

所以,我的具体问题是这样的:

是否可以在 Windows 上使用简单的、最基本的 Docker 二进制文件来实现这一点,而无需依赖 Docker Desktop、WSL2 等?也许可以使用 PowerShell 来调整系统,或者使用其他一些未经许可的开源 CLI 来实现这一神奇的功能?

我正在寻找一个是/否的答案(如果是,希望有可重复的说明。)

如果无法做到,只要我能记录下来,我也可以接受。

请注意我提出这个问题的严格背景/限制。

谢谢,祝你周末愉快。

附言:

我不想争论 WSL2 好不好,或者为什么我不考虑它。WSL2 没什么问题,但存在一些操作限制,使得 WSL2 对于非常具体的业务案例来说不太理想(我不会在这里讨论这一点)。

谢谢。

答案1

,这是不可能的。没有虚拟机就不可能。

要理解原因,首先需要了解 Linux 上的容器是如何工作的:通过利用内核功能在某些方面将进程树与主机系统隔离。通常,容器有自己的:

  • PID 命名空间(它看不到“外部”进程)
  • 挂载命名空间(它看不到主机文件系统)
  • 网络命名空间(它显示为单独的主机,并且无法访问主机的localhost
  • IPC(无法与“外部”进程进行进程间通信)

如今,借助 WSL,您可以在 Windows 上运行 Linux 二进制文件。但是,WSL 1 不使用 Linux 内核,因此不支持 Linux 命名空间。WSL 1 无法运行 Docker 容器。

Docker Desktop 利用虚拟机在 Windows 上运行 Linux 容器。它支持两种操作模式:Hyper-V 和 WSL 2。Hyper-V 是 Docker Desktop 最初的工作方式,但它不适用于 Windows 家庭版。WSL 2 建立在 Hyper-V 平台之上。它适用于家庭版。与原始 Docker Desktop Hyper-V VM 一样,它运行真正的 Linux 内核。

当您在 Docker Desktop 上“切换到 Linux”时,您会切换到运行 Linux 的虚拟机。

您无法在 Windows 上运行 Linux 容器。Linux 容器只能在 Linux 上运行。

您可以用完全开源的软件替换 Docker Desktop,并获得(需要一些额外工作)相同的 CLI 体验。但是,绝对需要 VM。

相关内容