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

时间:2017-02-10 11:44:28

标签: linux docker docker-for-windows windows-container docker-desktop

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

我使用的是Docker Desktop for Windows

的测试版

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

编辑:

一段时间过去了,这个问题很受欢迎。我想在此添加一条说明,解决方法是使用新的netstandard。它允许我将4.6.2框架打包到新库中。

10 个答案:

答案 0 :(得分:74)

Update2:08.2018 如果您使用的是Docker-for-Windows,则可以同时运行Windows和Linux容器同时https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows-and-linux-containers-simultaneously/

奖励:与问题没有直接关系,但您现在不仅可以运行Linux容器本身,还可以运行像kubernetes这样的协调器:https://blog.docker.com/2018/07/kubernetes-is-now-available-in-docker-desktop-stable-channel/

于2018年更新:

原始答案一般是正确的,几个月前,docker添加了experimental feature LCOWofficial github repository)。

来自this post

  

Docker for Windows是否已经运行Linux容器?那就对了。   Docker for Windows可以运行Linux或Windows容器,并提供支持   通过Hyper-V Moby Linux VM实现Linux容器(从Docker开始)   Windows 17.10此VM基于LinuxKit。)

     

使用LCOW运行Linux容器的设置要简单得多   以前的架构,其中Hyper-V Linux VM运行Linux Docker   守护进程,以及所有容器。使用LCOW,Docker守护进程   作为Windows进程运行(与运行Docker Windows时相同)   容器),每次启动Linux容器Docker   推出运行带有Linux的VM的最小Hyper-V管理程序   kernel,runc和在顶部运行的容器进程。

     

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

<强> 原件:

正如@PanagiotisKanavos在评论中所提到的,容器不是用于虚拟化,而是正在使用主机的资源。结果,现在windows容器无法运行&#34; as-is&#34;在linux机器上。

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

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

此外,this answer提供了更多详细信息。

答案 1 :(得分:16)

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

但是你可以在linux上运行windows。

Windows Server / 10附带ubuntu操作系统的基本映像( 2016年9月测试版服务包之后)。这就是你可以在Windows上运行linux而不是其他方面的原因。看看这里。 https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

您可以通过右键单击托盘菜单中的泊坞窗来更改操作系统容器Linux和Windows。

enter image description here

enter image description here

答案 2 :(得分:8)

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

在Windows中,你必须借助virtuallization(使用Hyper-v)来拥有与你的容器相同的操作系统,然后你应该能够运行它。

Docker for windows是类似的应用程序,它建立在Hyper-v上,有助于在Windows上运行linux docker容器。 但据我所知,没有任何东西可以帮助在Linux上运行Windows容器。

答案 3 :(得分:6)

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

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

之后如果Docker由于错误而无法启动,请使用&#34;切换到Windows容器......&#34;在设置中。

(这可以作为对已接受答案的评论移动,但我没有足够的声誉这样做)

答案 4 :(得分:2)

解决方案1-使用VirtualBox

根据this post中的 Muhammad Sahputra 建议,可以在 VirtualBox 内运行 Windows操作系统(使用VBoxHeadless-无图形接口)放在 Docker容器中。

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

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


解决方案2-使用红酒

对于简单的应用程序,甚至可能更复杂的应用程序,您可以尝试在Docker容器内使用 葡萄酒

This docker hub page可以帮助您实现目标。


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

答案 5 :(得分:2)

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

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

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

  

此Vagrant环境创建了一个Docker Machine以在您的计算机上工作   带有Windows容器的MacBook。您可以轻松地在Docker之间切换   适用于Mac Linux容器和Windows容器。

Running bash commands enter image description here

  

构建无头的流浪者盒子

$ 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)

答案 6 :(得分:1)

如今,您可以在Linux上运行MSSQL和DOTNET,因此可以在Linux容器中运行。

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

也:https://hub.docker.com/r/microsoft/dotnet/

答案 7 :(得分:0)

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

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

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

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

答案 8 :(得分:0)

我们可以在Windows上运行Linux容器。用于Windows的Docker使用基于Hyper-v的Linux-Kit或WSL2作为后端,以简化Linux容器。

如果任何具有这种设置的Linux发行版,我们都可以运行Windows容器。 Docker for Linux仅支持Linux容器。

答案 9 :(得分:-1)

Windows容器未在Linux上运行,您也无法直接在Windows上运行Linux容器。