Last week I had the luck to attend the Microsoft Azure OpenHack in Amsterdam. We spent two and a half days learning a lot about kubernetes, Azure Container Services, Azure Container Registry, Azure OMS and Minecraft!

In one of the challenges we decided to implement a sidecar container for logging purposes. So using .NET Core we created a console application with proper handling of the"Control+C" and"Control+Break" key shortcuts.

The following code shows you the structure of the console app we created and will help you Prepare a .Net Core Console App for Docker

 1using System;
 2using System.Threading;
 3using System.Threading.Tasks;
 4
 5namespace docker.controlc
 6{
 7    class Program
 8    {
 9        // AutoResetEvent to signal when to exit the application.
10        private static readonly AutoResetEvent waitHandle = new AutoResetEvent(false);
11
12        static void Main(string[] args)
13        {
14            // Fire and forget
15            Task.Run(() =>
16            {
17                var random = new Random(10);
18                while (true)
19                {
20                    // Write here whatever your side car applications needs to do.
21                    // In this sample we are just writing a random number to the Console (stdout)
22                    Console.WriteLine($"Loop = {random.Next()}");
23
24                    // Sleep as long as you need.
25                    Thread.Sleep(1000);
26                }
27            });
28
29            // Handle Control+C or Control+Break
30            Console.CancelKeyPress += (o, e) =>
31            {
32                Console.WriteLine("Exit");
33
34                // Allow the manin thread to continue and exit...
35                waitHandle.Set();
36            };
37
38            // Wait
39            waitHandle.WaitOne();
40        }
41    }
42}

Note that we are handling the Console.CancelKeyPress because Docker does not behave as expected if you use the typical Console.ReadKey method to make the application run until a key is pressed.

Get the code here.

Hope it helps!