是否可以在 Linux 上运行 Windows 容器?该场景基于用 .NET (旧网络)编写的应用程序,想要使用 Docker 运行此应用程序的 Linux 用户 需要在 --- 上提供 localhost
net462
编写的 API。
我正在使用 Docker Desktop for Windows 的 beta 版本。
如果不是,那为什么 Windows 可以运行 Linux 容器而不是反之呢?
随着时间的流逝,这个问题很受欢迎,我想在这里添加一个注释,解决方法是使用新的 .NET Standard 。它允许我将 4.6.2
框架打包到一个新库中。
原文由 Sebastian 506563 发布,翻译遵循 CC BY-SA 4.0 许可协议
TL;博士:
问: Windows 容器可以在 Linux 上运行吗?
答: 不,他们不能。
容器使用的是底层操作系统资源和驱动,所以 Windows 容器只能在 Windows 上运行,Linux 容器只能在 Linux 上运行。
问: 但是 Docker for Windows 呢?还是其他基于 VM 的解决方案?
答: Docker for Windows 允许您模拟在 Windows 上运行的 Linux 容器,但在底层创建了一个 Linux VM,因此 Linux 容器仍然在 Linux 上运行,而 Windows 容器在 Windows 上运行。
奖励:阅读 这篇关于在 Windows 上运行 Linux docker 容器的非常好的文章。
问: 那么,如果我想在容器中运行,我应该如何处理 .NET Framework 462 应用程序?
答: 这取决于。考虑以下建议:
如果可能,请移至 .NET Core。由于 .NET Core 带来了对 .NET Framework 大部分主要功能的支持,而 .NET Framework 4.8 将是 .NET Framework 的最后一个版本
如果您无法迁移到 .NET Core - 正如@Sebastian 提到的那样 - 您可以将库转换为 .NET Standard ,并拥有两个版本的应用程序 - 一个在 .NET Framework 4.6.2 上,一个在 .NET Core 上 - 它是并不总是很明显。 Visual Studio 很好地支持它(具有多目标),但某些依赖项可能需要格外小心。
(不太推荐)在某些情况下,您可以运行 Windows 容器。 Windows 容器越来越成熟,在 Kubernetes 等平台上得到了更好的支持。但为了能够运行 .NET Framework 代码,您仍然需要在“Server Core”的基础镜像上运行,该镜像占用大约 1.4 GB。在同样罕见的情况下,您可以将代码迁移到 .NET Core,但仍可在 Windows Nano 服务器 上运行,图像大小为 95 MB。
也留下历史的旧更新
更新 2: 08.2018
如果您使用 Docker-for-Windows,您现在可以同时运行 Windows 和 Linux 容器: 同时 _运行 Docker Windows 和 Linux 容器_
奖励: 与问题没有直接关系,但您现在不仅可以运行 Linux 容器本身,还可以运行像 Kubernetes 这样的编排器: Kubernetes 现在在 Docker 桌面稳定通道中可用
2018 年更新:
最初的答案总体上是正确的, 但是 几个月前,Docker 添加了 实验性功能 LCOW ( 官方 GitHub 存储库)。
从 这篇文章:
原来的:
正如@PanagiotisKanavos 在评论中提到的,容器不是用于虚拟化的,它们 正在使用主机的资源。因此,目前 Windows 容器无法在 Linux 机器上“按原样”运行。
但是- 你可以通过使用 VM 来做到这一点 - 因为它适用于 Windows。您可以在 Linux 主机上安装 Windows VM,这将允许运行 Windows 容器。
有了它,恕我直言,在 生产 环境中以这种方式运行它并不是最好的主意。
此外, 此答案 提供了更多详细信息。