2016-08-31 9 views
4

を使用せずにドッキングウィンドウの群れサービスなどのオープン自己ホスト型servicestackサービスをしてください:は、私は次の形式を持っているservicestackを使用してC#で書かれたコンソールアプリケーションを持っているコンソールのreadlineやreadkey

static void Main(string[] args) 
     { 
      //Some service setup code here 

      Console.ReadKey(); 
     } 

たときに実行このコードは正常に動作しますコンソールとしてのWindows上で。このプロジェクトはほぼ正確にhttps://github.com/ServiceStack/ServiceStack/wiki/Self-hostingです。これはテストプロジェクトなので

私はこのプロジェクトをlinux上でモノを使ってコンパイルし、ドッカーファイルを作成します。

私はそれがインタラクティブ

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

であれば、私は-itスイッチを省略した場合、コンテナは、コンテナが終了、しかし、フォアグラウンド

で実行されます。この画像に基づいて、コンテナを実行している問題がありませんストレート - STDINストリームがないので、Console.ReadKey()は機能しません。

私は、群れの中でホストされているサービスを取得しようとしているので、分離されたという概念はありません。私はコンソールサービスを生かし続けるために私のメインメソッド内でループをスピンアップすることができますが、これは私にはハッキーなようです...

私のコンテナを実行したい状況で私のサービスを生かし続ける良い方法がありますかdetatched

+0

この回答はうまくいっているようですか? http://stackoverflow.com/a/34099238/1318694 – Matt

+0

Wait.Set()はSIGINTとSIGTERMで実行する必要がありますが、C#/ monoでは動作します。 – Matt

+0

ええと...私はそれを試してみましょう... – Jay

答えて

6

this answer for keeping .NET apps aliveから盗む(ドッカの実行-d ...)、あなたはドッカーでSTDIN開いたままにする必要はありません意味Consoledocke run -i)を使用せずに待つことができます。

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

ドッカーますdocker stopにSIGTERMを送信し、ctrl-cはSIGINTを012に送信しますを入力してからプログラムを終了させて​​ください

Wait.Set(); 
関連する問題