在Windows容器中,是选择Console App还是Windows Service?

11

我正在尝试使用.net 4.5在Server 2016 CTP5上构建基于Windows Container的微服务。

在非容器化的世界中,我使用一个作为Windows服务部署的控制台应用程序来订阅队列并完成其工作。

在容器中,我可以直接运行控制台应用程序,它似乎能够正常运行。是否需要将其安装为Windows服务呢?


如果它能正常运行,就没有必要将其安装为Windows服务。这适用于所有东西。 - Bob Brinks
我想我以为我已经表达了我的需求。我正在一个传统的Windows服务器(2012)上运行一个微服务,将其转移到Windows容器上。 - TalMcMahon
1
此外,我只是好奇这与超级用户有何关系? - TalMcMahon
@TalMcMahon,你提到你正在订阅队列,是 MSMQ 吗?如果是,你是如何能够连接到容器中的 HOST MSMQ 的? - Sujit Singh
我正在尝试将一个Windows服务转换为控制台应用程序,以便在AKS上运行它,监听队列,但容器在控制台完成后立即退出。也就是说,它不会继续监听,也不会持续运行。你是如何做到的? - Pine Code
显示剩余4条评论
1个回答

19
不,您不需要将其安装为服务。当您在容器中运行应用程序时,Docker会监视容器中的活动进程。如果活动进程停止,则容器将退出。因此,您应该在前台运行应用程序,并让Docker将容器放在后台(通过使用docker run -d启动它)。
一个例外是当现有平台已经是Windows服务时,例如microsoft/iis镜像。IIS在容器中在后台运行,因此您需要启动另一个进程来保持容器运行-这就是为什么您看到IIS容器以这种方式启动的原因。
docker run -d -p 80:80 microsoft/iis ping -t localhost

ping命令保持容器运行,而IIS服务实际上响应请求。然而这并非理想状态,因为Docker正在监控ping,所以如果IIS服务停止了,容器仍会继续运行。


太好了,这正是我感觉到的,但我需要进一步测试确认。 - TalMcMahon
5
顺便提一下,在当前的Microsoft/IIS镜像中,默认的入口点是“C:\ServiceMonitor.exe w3svc”,如果你不带任何参数运行这个镜像,这个ServiceMonitor将会保持它一直运行。因此,即使在Docker中使用Windows服务并不是“正确的方式”,但如果确实有必要,这可能是一个解决方法。 - Tobias

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