在Azure DevOps的Windows托管构建代理中运行Linux容器

6
我正在使用Azure DevOps,并且已经设置了一个Linux构建流水线(ubuntu-16.04),用于构建代码,使用Docker Compose启动容器,然后使用这些容器运行集成测试。这一切都运作得很好。
现在我想设置一个Windows构建流水线来做同样的事情。但是,在使用windows-2019win-1803镜像时,当我执行docker stack up命令时,会出现以下错误信息:

image operating system "linux" cannot be used on this platform

所以,我猜测Docker以Windows模式安装,并尝试使用以下命令将其切换为Linux容器:

DockerCli.exe" -SwitchLinuxEngine

或者

"%ProgramFiles%\Docker\Docker\DockerCli.exe" -SwitchLinuxEngine

然而,DockerCli.exe可执行文件似乎根本没有安装。
我唯一能想到的两个方法是:
  1. 设置自托管构建代理
  2. 在其他地方启动所需的容器
但是,这两个方法都需要大量工作来设置,我确实不需要,也不想要维护它们的运行成本和工作量。
有没有解决方案可以在托管的Windows构建代理上运行Linux容器?

自托管的构建代理实际上并不难做,只要您的网络策略和系统管理员在提供新机器方面没有受到官僚主义的限制。您还可以将代理作为容器运行,并且我认为您实际上可以下载和修改MSFT使用的图像。 - StingyJack
@StingyJack 我之前在虚拟机上运行过它(在官方容器镜像出现之前),而且它很简单,但我仍然不想承担运行它的成本、安全和维护的负担。此外,我有一个隐秘的怀疑,尝试让我的场景与托管在容器中的代理一起工作(而不是虚拟机)可能会充满挫败感 :) - Cocowalla
1
自2008年以来,如果计算所有本地版本的TFS,则我已经完成了大约> 100个构建代理。现在它变得更加容易,但我理解你的观点。顺便说一下,我只能使用托管代理来构建Linux映像,无法让任何代理运行任何类型的容器。我已经开了一个支持案例,但是没有任何方向上的进展。如果我得到相关信息,我会在这里发布。 - StingyJack
@StingyJack 我怀疑从Linux构建Windows镜像可能永远不可能,但是可以通过切换到Linux容器模式从Windows构建Linux镜像 - 只是由于某些原因,托管的构建代理不支持它。 - Cocowalla
1个回答

4
在Azure DevOps Windows托管的构建代理中运行Linux容器。
首先,请查看在Windows托管代理上安装的镜像:Windows托管代理中的Docker镜像。 Docker EE on Server根本不支持Linux容器。因此,在托管Win-1803代理上构建Linux docker镜像是不可能的,只能构建Windows docker镜像。 直到现在,唯一的两个解决方法是使用基于Windows机器的自托管代理,或者运行具有两个单独的代理作业(将构建工件传递回和传递给另一个在托管Linux代理上运行的代理作业和另一个在托管Windows代理上运行的代理作业)。
但是,既然这两个解决方法都不方便,那么就没有其他解决方法可以实现您想要的功能。
此外,我们的官方论坛提出了这样的建议特性:在托管代理池上支持带Linux容器的Docker(LCOW)。 您可以在那里进行投票和评论,我们的Product Group团队将定期查看这些建议,并考虑将其作为开发人员路线图。如果可以实现此功能,则构建Linux容器将非常方便,而无需考虑哪个代理只能支持。

图片列表不是构建代理缓存的吗?所以你不需要拉取它们吧?另外,我认为构建代理上运行的是Docker Desktop,你有证据表明它是Docker EE,并且不能在Windows上运行Linux容器吗?(看起来这篇文章持相反意见:https://www.altaro.com/msp-dojo/linux-containers-windows-server-2019/) - Cocowalla
就此而言,我已经为你提供的功能投了赞成票(但是我从来没有通过建议获得过好的体验...)。像功能链接中的人一样,单独的代理作业对我来说并没有帮助,因为目的是从Windows运行集成测试。 - Cocowalla
@Cocowalla,首先,对于我关于“Docker EE在服务器上根本不支持Linux容器”的不准确陈述表示歉意。这个声明的背景是我们提供的托管代理。正如您分享的链接所示,它是针对本地的,而且这是我们提供的解决方法:使用基于Windows机器的自助代理。但是到目前为止,我们还没有在我们的托管代理镜像上扩展此功能。 - Mengdi Liang
@Cocowalla,emhh,我从“从未有过好的建议体验”中似乎明白了一些不太好的事情。正如您在我们的官方建议论坛中所看到的那样,那里有很多建议。我们的产品团队需要将优先级较高的建议纳入路线图。但这是不稳定的。我们的团队还要考虑非常紧急的建议。就像我的同事所说,这个工作区有点笨拙。但是到目前为止,我们已经发布了优先级更高的冲刺。 - Mengdi Liang
@MerlinLiang-MSFT - 在Docker EE上运行现有容器(例如,旋转Redis实例以便于某些集成测试)和构建镜像之间有什么区别吗? - StingyJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接