Recently I've noticed my ServiceStack docker containers are not shutting down when bad things happen like getting disconnected from RabbitMq.
When a fatal disconnect occurs I have my containers do
Environment.Exit(1) or if that fails they
Environment.FailFast() - this works fine for containers not hosting a servicestack instance. But the servicestack containers and process hangs around even after Exit.
I isolated a container and ran the
dotnet MyServiceStackApp.dll manually from inside and the logs look great:
---> (Inner Exception #0) RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
at IPHostEntry System.Net.Dns.InternalGetHostByName(string hostName)
at void System.Net.Dns.ResolveCallback(object context)
at IPHostEntry System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
at IPAddress System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
<-- snip -->
Application is shutting down...
but then I check the process list and see my app is still running
root@82eadfc3efa2:/app# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18152 3236 pts/0 Ss 20:32 0:00 /bin/bash
root 8 0.4 1.9 22815560 154780 pts/0 SLl 20:32 0:02 dotnet MyServiceStackApp.dll
root 639 0.0 0.0 36640 2808 pts/0 R+ 20:42 0:00 ps -aux
What is the proper way to terminate a running servicestack web service?
There’s nothing specific or different about ServiceStack which just runs as .NET Core middleware, i.e it’s all just an ASP.NET Core App.
There’s a couple of solutions for shutting down/restarting an ASP.NET Core App in:
Hmm thanks for the info. This is very troublesome - I'll try the IApplicationLifetime option but it seems it only stops the site which boots up again at the first request. According to comments at least.
Docker and asp net core is quite a pain