Windows容器中的控制台应用程序或Windows服务?

Tal*_*hon 8 docker windows-server-2016

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

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

在一个容器中,我可以运行控制台应用程序,它似乎运行得很好.是否需要将其安装为Windows服务?

Elt*_*man 16

不,您不想将其作为服务安装.在容器中运行应用程序时,Docker会监视容器中的活动进程.如果活动进程停止,则容器退出.因此,您应该在前台运行您的应用程序,并让Docker将容器放在后台(通过启动它docker run -d).

一个例外是现有平台已经是Windows服务 - 例如microsoft/iis映像.IIS在容器的后台运行,因此您需要启动另一个进程来保持容器运行 - 这就是为什么您看到IIS容器像这样启动的原因:

docker run -d -p 80:80 microsoft/iis ping -t localhost
Run Code Online (Sandbox Code Playgroud)

ping命令使容器保持运行,而IIS服务实际响应请求.但这并不理想,Docker正在监控,ping所以如果IIS服务停止,容器会继续运行.

  • 正如旁注:在当前的microsoft/iis映像中,默认入口点是"C:\ ServiceMonitor.exe w3svc",如果运行此映像时没有任何参数,则此ServiceMonitor将使其保持运行.因此,即使不是Docker使用Windows服务的"方法",如果确实需要,这可能是一种解决方法. (4认同)