Windows容器可以托管在Linux上吗?


238

是否可以在Linux上运行Windows容器?该方案基于一个用.NET(旧网络)编写的应用程序,而Linux用户希望通过Docker运行此应用程序以在上提供书面API 。net462localhost

我正在使用Windows的Docker桌面的 beta版本

如果不是,那为什么Windows可以运行Linux容器而不是反之?

编辑:

随着时间的流逝,这个问题很受欢迎。我想在此处添加一条注释,说明解决方法是使用新的netstandard。它使我可以将4.6.2框架打包到新的库中。


4
不可能-要构建和运行Windows容器,需要具有容器支持的Windows系统。
ajtrichards

5
好的,但是为什么Windows可以运行linux容器?现在没有反之亦然?
塞巴斯蒂安506563 '17

10
@ Sebastian506563,因为Docker在后台运行VirtualBox虚拟化以使Linux容器在Windows上运行。从理论上讲,我猜想也可以采用其他方式,只是docker没有实现它。
格雷戈里·苏瓦利安

5
使用虚拟机,每个虚拟机都有自己的操作系统。对于容器,存在基础OS映像,并且每个容器在基础之上添加了一个新的薄层。在docker的这个基于Linux的基本OS中。即您的Windows容器不能使用基本容器,因为它不同。 blog.risingstack.com/...
Xen的达拉

3
@PanagiotisKanavos请撰写的answere
塞巴斯蒂安506563

Answers:


162

Update3:06.2019 一些评论说答案不清楚,我将尽力澄清。

TL; DR:

问: Windows容器可以在Linux上运行吗?

答: 不可以。 容器使用底层的操作系统资源和驱动程序,因此Windows容器只能在Windows上运行,Linux容器只能在Linux上运行。

问:但是Windows版Docker呢?还是其他基于VM的解决方案?

答:适用于Windows的Docker允许您在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,并具有2个版本的应用程序-一个在.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。

还保留了历史的旧更新

UPDATE2:08.2018 如果你正在使用泊坞窗换的Windows,你现在可以同时运行Windows和Linux容器同时 https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows-和linux-containers同时

奖励:与问题没有直接关系,但是您现在不仅可以运行linux容器本身,还可以运行kubernetes之类的编排器:https ://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /

在2018年更新:

最初的答案通常是正确的,几个月前,docker添加了实验功能LCOW官方github存储库)。

这篇文章

Windows版Docker是否已经在运行Linux容器?那就对了。适用于Windows的Docker可以运行Linux或Windows容器,并通过Hyper-V Moby Linux VM支持Linux容器(自适用于Windows的Docker 17.10以来,该VM基于LinuxKit)。

与LCOW一起运行Linux容器的设置比以前的体系结构简单得多,在该体系结构中,Hyper-V Linux VM与所有容器一起运行Linux Docker守护程序。使用LCOW,Docker守护进程作为Windows进程运行(与运行Docker Windows容器时相同),并且每次启动Linux容器时,Docker都会启动一个最小的Hyper-V虚拟机管理程序,该虚拟机运行带有Linux内核,runc和容器进程的VM在顶部运行。

因为只有一个Docker守护程序,并且该守护程序现在在Windows上运行,所以很快将可以在同一网络名称空间中并排运行Windows和Linux Docker容器。这将为Windows上的Docker用户解锁许多激动人心的开发和生产场景。

原版的:

如@PanagiotisKanavos的评论中所述,容器不用于虚拟化,并且它们正在使用主机的资源。结果,目前Windows容器无法在Linux机器上按“原样”运行。

但是 -您可以通过使用VM来实现-因为它可以在Windows上运行。您可以在Linux主机上安装Windows VM,这将允许运行Windows容器。

有了它,恕我直言,在PROD环境中以这种方式运行它并不是最好的主意。

另外,此答案提供了更多详细信息。


12
链接的答案实际上并未提供任何详细信息-只是说明了如何在Windows上运行Linux容器(反之)。可以在Windows VM中运行Docker,但是您需要为此提供嵌套的虚拟化支持。这意味着它适用于VMware,但不适用于Virtualbox。
拉尔夫(Ralf)'18年

3
答案中有很多单词,但似乎无法回答问题。
基比亚斯(Kyberias)

2
它不能回答问题。它不应该这么高排名
非晶

2
这不是这个问题的答案。在Linux上运行docker与在Windows上运行docker明显不同。为什么将此标记为答案?\
阿妮(Ani)

容器=有效运行差异隔离的应用程序(针对特定OS构建),更少的内存,磁盘空间,开销,更有效的硬件利用率VM =用例..针对各种用例运行整个OS ...,硬件利用率良好(我不需要为每个操作系统购买一台差异计算机。如果我的用例确实需要多个操作系统),但是与容器相比,硬利用率不那么高。Joyent首席技术官的
精彩

16

不,您不能直接在Linux上运行Windows容器。

但是您可以在Windows上运行Linux。

Windows Server / 10随附了ubuntu OS的基本映像(在2016年9月测试版Service Pack之后)。这就是您可以在Windows而不是其他方面运行linux的原因。在这里查看。https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

您可以通过右键单击任务栏菜单中的Docker在OS容器Linux和Windows之间进行切换。

在此处输入图片说明

在此处输入图片说明


13
OP希望改为在Linux服务器上运行Windows容器,因此该容器无法回答问题。但是我不喜欢没有发表评论就投反对票的人,所以我投赞成票
雏菊

1
@Karthikeyan V:因为这不是问题的答案。
Stefan Steiger '18

我不确定之前说的是什么,但是第一句话说不能,第二句话说可以。它可能是缺少的东西或令人困惑的东西。
StingyJack

9

与虚拟化不同,容器化使用相同的主机操作系统。因此,基于linux构建的容器不能在Windows上运行,反之亦然。

在Windows中,您必须借助虚拟化的帮助(使用Hyper-v),使其与容器的操作系统具有相同的操作系统,然后才能运行相同的操作系统。

Docker for Windows是基于Hyper-v构建的类似应用程序,可帮助在Windows上运行linux docker容器。但是据我所知,没有什么能帮助在Linux上运行Windows容器。


9

容器使用OS内核。Windows容器利用进程来运行。因此从理论上讲Windows容器不能在Linux上运行。

但是,有一些利用VMstyle解决方案的解决方法。

我已经找到了在Mac上使用Vagrant和Packer的解决方案,因此它也适用于Linux:https : //github.com/StefanScherer/windows-docker-machine

这个Vagrant环境创建了一个Docker Machine,可在具有Windows容器的MacBook上运行。您可以轻松地在Docker for Mac Linux容器和Windows容器之间切换。

运行bash命令 在此处输入图片说明

建立无头的流浪者盒子

$ git clone https://github.com/StefanScherer/packer-windows
$ cd packer-windows

$ packer build --only=vmware-iso windows_2019_docker.json
$ vagrant box add windows_2019_docker windows_2019_docker_vmware.box

创建Docker机器

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019

切换到Windows容器

$ eval $(docker-machine env 2019)

7

解决方案1-使用VirtualBox

正如Muhammad Sahputra这篇文章中建议的那样,可以在Docker容器内的VirtualBox(使用VBoxHeadless-无图形界面)内运行Windows操作系统

此外,VM网络配置中的NAT设置可以执行端口转发,这使您能够传递进出Docker容器的任何流量。最终,从广泛的角度来看,这最终使您可以在Linux机器之上运行任何基于Windows的服务。

也许这不是Docker容器的典型用例,但绝对是解决问题的一种有趣方法。


解决方案2-使用酒

对于简单的应用程序,甚至可能更复杂的应用程序,您可以尝试在docker容器中使用wine

该Docker枢纽页面可帮助您实现目标。


我希望Docker能够像几年前在Windows上使用docker-machine一样尽快发布本机解决方案。


6

您可以在虚拟机中使用Windows容器(来宾操作系统应符合要求-Windows 10 Pro或Windows 2016)。

例如,您可以使用VirtualBox,只需在系统/加速/半虚拟化界面内部启用Hyper-V。

之后,如果Docker由于错误而无法启动,请使用设置中的“切换到Windows容器...”。

(可以将其作为对已接受答案的评论,但我没有足够的声誉来做到这一点)


3

尽管适用于Windows的Docker完全能够运行Linux容器,但是从理论上讲,相反,由于实际原因,未实现。

最明显的是,尽管适用于Windows的Docker可以自由运行Linux VM,但是适用于Linux的Docker需要Windows许可才能在VM中运行。

另外,Linux是完全可定制的,因此Docker for Windows使用的Linux VM已精简到只有几个MB,仅包含运行容器所需的最低要求,而可用的最小Windows发行版约为1.5 GB。它的大小可能不切实际,但比Windows on Linux的笨重得多。

虽然肯定有人可以出售与Windows许可证捆绑在一起的Docker for Linux版本,并准备在Linux下运行Windows容器(而且我不知道这种产品是否存在),但最重要的是您无法避免支付Windows供应商锁定价格:金钱和存储空间。


0

您现在可以在Linux上运行MSSQL和.NET Core,因此可以在Linux容器中运行。

请参阅:https : //hub.docker.com/r/microsoft/mssql-server-linux/

另外:https : //hub.docker.com/r/microsoft/dotnet/

当然,除非有专门针对Linux编译的版本,否则直接回答您的问题是。


3
的确如此-但这与问题无关。另外,MS-SQL不仅仅是引擎(顺便说一句,Linux上没有文件流或R,因此它甚至不是整个引擎)。
Stefan Steiger,

您必须考虑向前一步...他为什么要问?如果他因为要运行其中之一而问:瞧。
dagelf

2
可能。但是恕我直言,他可能正在问这个问题,因为他已经这样做了,现在他必须在Linux上运行SSRS / SSAS或某些Web窗体控件(例如ReportViewer)。
Stefan Steiger

Docker镜像microsoft / dotnet用于.Net Core,它与旧的.Net 4.x完全不同,因此您无法在.Net Core上运行为旧的.Net设计的应用程序
j123b567

3
他们在支持.NET Core不是 .NET -这是两个完全不同的环境。
Slavik Meltser

-1

Windows容器不在Linux上运行,您也不能直接在Windows上运行Linux容器。


6
您能详细说明一下吗?
Matthieu

18
您可以在Win 10运行Linux容器
库格尔

2
我投票赞成这个人,因为我当时认为确实如此。但是,您现在可以在Windows上的Docker中运行Linux容器(Docker在名为MobyLinux的VM中运行)。
JakeJ

实际上,Windows运行一个微型Linux VM来运行Linux容器。检查您的Hyper-V的资源,看看它
TuğrulKarakaya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.