在docker

时间:2018-06-17 20:09:26

标签: c# docker mono

我用一个简单的C#程序创建了一个测试图像来测试捕获docker kill -s SIGINT $cont_id命令发送的SIGINT信号的问题。

dockerfile:

FROM arm32v7/mono
COPY . /usr/local/bin/sigint/
CMD ["/usr/bin/mono" , "/usr/local/bin/sigint/SigIntCatcher.exe"]

的Program.cs:

static void Main(string[] args)
{
    Console.CancelKeyPress += Console_CancelKeyPress;
    do Thread.Sleep(2000); while (true);
}

private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
    Console.WriteLine($"Got signal {(e.SpecialKey == ConsoleSpecialKey.ControlC ? "Ctrl+C" : "Ctrl+Break")}");
    Environment.Exit(0);
}

如果我启动docker run -it $image_id之类的容器,而另一个终端执行docker kill -s SIGINT $cont_id,则容器内的程序会捕获信号并输出​​“获取信号Ctrl + C”。

但是如果我使用docker run -d $image_id" and try to send SIGINT with docker kill - nothing happens. I also connected to the running container with docker exec -it $ cont_id bash and checked that mono`进程以分离模式启动容器,则PID = 1。

我做错了什么或是单声道/码头工具中的错误? 尽管此示例使用arm系统的基本映像(Raspberry Pi),但在Ubuntu和Windows中运行类似代码时遇到同样的问题。

0 个答案:

没有答案