保持自托pipe的服务堆服务作为docker群服务而不使用控制台readline或readkey

我有一个使用C#编写的控制台应用程序,它具有以下forms:

static void Main(string[] args) { //Some service setup code here Console.ReadKey(); } 

在Windows上作为控制台运行时,此代码正常工作。 该实现几乎完全是https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting,因为这是一个testing项目

然后我在linux上使用mono来编译这个项目,并构build成一个docker文件。

如果是交互式的,基于这个映像运行容器是没有问题的

 docker run -it --name bob -p 1337:1337 <myservice> 

容器在前台运行

但是,如果我省略-it开关,容器立即退出 – 我假设因为没有STDINstream,所以Console.ReadKey()不起作用。

我正在尝试把这个服务托pipe在一个群中,所以没有任何超脱的概念。 我可以在我的主要方法中启动一个循环,以保持控制台服务的活着,但这似乎对我来说很难…

是否有一个好办法保持我的服务活着的情况下,我想运行我的容器detatched(docker运行-D …)

为了让.NET应用程序保持活跃状态 , 为了避免这个问题 ,您可以等待,而不必使用Console ,这意味着您不需要在Docker( docke run -i )中保持stdin打开状态:

 private ManualResetEvent Wait = new ManualResetEvent(false); Wait.WaitOne(); 

Docker会在docker stop上发送一个SIGTERM,而ctrl-c会发送一个SIGINT所以这些信号应该被捕获 ,然后让程序结束

 Wait.Set();