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

Seb*_*563 203 linux docker docker-for-windows windows-container docker-desktop

是否可以在Linux上运行Windows Containers?该场景基于一个用.NET(旧网)编写的应用程序和想要通过Docker运行它的Linux用户来提供一个书面API .net462localhost

我正在使用Docker Desktop for Windows的测试版

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

编辑:

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

evg*_*nyl 116

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

奖励:与问题没有直接关系,但你现在不仅可以运行linux容器本身,还可以运行像kubernetes这样的orchestrator:https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker桌面稳定通道/

更新于2018年:

原始答案一般是正确的,几个月前,docker添加了实验功能LCOW(官方github存储库).

这篇文章:

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

使用LCOW运行Linux容器的设置比以前的架构简单得多,在该架构中,Hyper-V Linux VM运行Linux Docker守护程序以及所有容器.使用LCOW,Docker守护程序作为Windows进程运行(与运行Docker Windows容器时相同),每次启动Linux容器时,Docker都会启动运行具有Linux内核,runc和容器进程的VM的最小Hyper-V虚拟机管理程序跑在上面.

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

原版的:

正如@PanagiotisKanavos的评论中所提到的,容器不是用于虚拟化,而是使用主机的资源.因此,目前windows容器无法在linux机器上"按原样"运行.

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

有了它,恕我直言这样在PROD环境下运行它将不是最好的主意.

此外,这个答案提供了更多细节.

  • 链接的答案实际上没有提供任何关于此的细节 - 它只是解释了如何在Windows上运行Linux容器(相反).可以在Windows VM中运行Docker,但您需要嵌套虚拟化支持.这意味着它适用于VMware,但不适用于Virtualbox. (12认同)
  • 答案中有很多单词,但似乎并不能回答问题。 (3认同)
  • 它不能回答问题。它不应该排名很高 (2认同)
  • 这不是这个问题的答案。在Linux上运行docker与在Windows上运行docker明显不同。为什么将此标记为答案?\ (2认同)

Kar*_* VK 16

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

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

您可以通过右键单击托盘菜单中的泊坞窗来在OS容器Linux和Windows之间进行切换.

在此输入图像描述

在此输入图像描述

  • OP希望在Linux服务器上运行Windows容器,所以这个问题没有回答.但我不喜欢没有评论就给予downvote的人,所以我给了一个upvote (11认同)
  • @Karthikeyan V:因为这不是问题的答案。 (6认同)

lve*_*lla 12

虽然 Docker for Windows 完全能够运行 Linux 容器,但相反,虽然理论上可行,但由于实际原因没有实现。

最明显的一点是,虽然 Docker for Windows 可以自由运行 Linux VM,但 Docker for Linux 需要 Windows 许可证才能在 VM 中运行它。

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

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


sun*_*waj 8

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

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

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


wor*_*und 8

容器使用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
Run Code Online (Sandbox Code Playgroud)

创建Docker机器

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019
Run Code Online (Sandbox Code Playgroud)

切换到Windows容器

$ eval $(docker-machine env 2019)
Run Code Online (Sandbox Code Playgroud)


Bal*_*tsa 6

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

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

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

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


Sla*_*ser 5

解决方案1-使用VirtualBox

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

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

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


解决方案2-使用酒

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

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


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