2016-11-22 4 views
8

Gibt es eine Möglichkeit, anmutig Shutdown eine DOTNET CORE Anwendung, die in läuft DOCKER? Wenn ja, welches Ereignis sollte ich hören?Wie man ordnungsgemäß auf dotnet mit Docker heruntergefahren?

Alles, was ich will, ist auf Kündigungsanfrage Ich möchte meine Stornierung Token/s zu den aktuellen Methoden übergeben und die Shut-Down verschieben, während sie arbeiten.

für einen Beispielcode der Suche, Referenz-Link usw., die auf Dotnet Kern relevant sind und nicht generische Informationen

UPDATE Diese Frage ist nicht ein Duplikat docker container exits immediately even with Console.ReadLine() in a .net core console application, weil ich habe nicht sofort Ausgangsproblem Ich muss in etwas wie Windows.SystemsEvents.SessionEnding tippen und auf Console.CancelKeyPress setzen und/oder implementieren WebHostBuilder() passt nicht die Rechnung.

+0

So vielleicht? http://shazwazza.com/post/aspnet-core-application-shutdown-events/ – DavidG

+0

[System.Runtime.Loader.AssemblyLoadContext.Default.Unloading] (http://www.michael-wheelan.net/replacing-appdomain -in-dotnet-core /) vielleicht – stuartd

+0

@DavidG auf der Suche nach ** DOTNET CORE ** und nicht ** ASP.NET CORE ** es hat nicht "ApplicationLifetime", aber ich danke Ihnen für Ihre Zeit! – cilerler

Antwort

3

System.Console hat ein Ereignis namens CancelKeyPress. Ich glaube, das wird ausgelöst, wenn ein Sigint-Ereignis in dotnet übergeben wird.

System.Console.CancelKeyPress += (s,e) => { /* do something here */}; 
1

Mit 2.0.0-preview2-006497 habe ich einige Tests, und jetzt das AssemblyLoadContext.Default.Unloading wird ausgelöst, wenn Docker ein SIGTERM/SIGINT an den Behälter sendet.

Beispiel Code wie folgt aussieht:

System.Runtime.Loader.AssemblyLoadContext.Default.Unloading += ctx => 
{ 
    // code here... 
}; 

Sehen Sie dieses Problem auch für einige weitere Details: https://github.com/aspnet/Hosting/issues/870

+0

danke für die Information hier, ich werde es testen und lassen Sie es wissen ... – cilerler

3

In .NET Core 2.0, können Sie das AppDomain.CurrentDomain.ProcessExit Ereignis verwenden, die auf Linux in Docker gut funktioniert. AssemblyLoadContext.Default.Unloading funktioniert wahrscheinlich auch noch vor .NET Core 2.0.

Verwandte Themen