当前位置: 首页 > 面试题库 >

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

姬向明
2023-03-14
问题内容

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

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

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

编辑:

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


问题答案:

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

TL; DR:

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

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

问: 那么Windows版Docker呢?还是其他基于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,并具有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环境中以这种方式运行它并不是最好的主意。



 类似资料:
  • 在Linux上运行Windows容器可能吗?该场景基于一个在.net(旧的net)中编写的应用程序和Linux用户,该用户希望使用Docker运行该应用程序,以便在上提供一个编写的API。 我正在使用Docker Desktop for Windows的测试版 如果不是,那么为什么Windows可以运行Linux容器,反之亦然? 编辑: 由于一段时间过去了,这个问题是一个流行的问题。我想在这里补充

  • 问题内容: 通常在绑定端口时,我会这样做,但是我可以在我的内部指定端口绑定吗? 我正在启动一个监听端口的服务器。服务器通过cmd行参数获取端口。如果我不必在两个位置(在command和中)重复端口,那将是很棒的 问题答案: 在您只能使用。该指令通知Docker容器在运行时监听指定的网络端口。EXPOSE不会使主机可以访问容器的端口。 要将Hostport分配给容器,您需要执行()。或发布 所有 公

  • 所以我把这个oracle数据库托管在Linux服务器上。我知道如何从windows机器上使用putty访问它,但我需要从windows机器上使用JDBC访问它。我有数据库的主机名、端口、服务名、用户名和密码。我不知道如何打开连接。我试过这样: 但我无法接通请帮帮忙 编辑: 好的,我意识到地址是错误的,所以我把它改为:Connection con=DriverManager.getConnectio

  • 我使用Win 10 Pro N(版本1709)作为开发机器,使用Windows Server 2016 Standard(版本1607)作为生产服务器。 我目前正在开发一个使用MongoDb作为数据库的ASP.NET Core2应用程序。 几天前,我第一次偶然发现了这个想法,将MongoDb作为Docker映像运行。 这是个好决定吗?或者在我的场景中我应该使用Linux容器而不是Windows容器

  • 问题内容: 我知道可以通过Github页面托管基于Jekyl的静态站点/博客。 可以对基于AngularJS的静态网站/博客做同样的事情吗? 问题答案: 考虑到所有的角度UI github页面实际上都是带有演示的角度应用程序,我会说是的: http://angular-ui.github.io/ http://angular-ui.github.io/bootstrap/ 等等

  • 了解如何配置WAS或OpenJPA,以便通过容器管理的实体管理器使用容器管理的身份验证。 试图通过在JNDI中注册为“JDBC/DB2”(指Oracle)的JDBC数据源访问Oracle数据库,该数据源在persistence.xml中定义。 persistence.xml 但是,当访问持久性单元的容器管理实体管理器时,会抛出ORA-01017无效的usrname/password。如果在pers