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

Console App or Windows Service in Windows Container?

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

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

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

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

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

docker run -d -p 80:80 microsoft/iis ping -t localhost

ping 命令保持容器 运行ning,而 IIS 服务实际响应请求。不过这并不理想,Docker 正在监视 ping 因此如果 IIS 服务停止,容器将保持 运行ning.