如何在 .Net Core 可执行文件中监听 Docker 信号?

3
我有一个用 .Net Core 写的控制台应用程序。我将在 Docker 容器中运行此应用程序。我想要优雅地停止这个进程,而不是让它在做某事的过程中被强行终止。是否可以在控制台应用程序内部监听到从 docker 发出的停止信号?在容器出现之前,我只需使控制台应用程序监听控制台窗口中键入的内容即可。如果有一种方法可以让 Docker 通过标准输入发送消息,我可以使用它,但是我还不了解 Docker 的全部功能。
2个回答

2
我的解决方案是最终不使用控制台应用程序。我了解到,如果我创建一个 Web 项目,我可以在网站的 Startup 中使用 ApplicationStopping CancellationToken 来告诉容器已经请求关闭。因此,与其让容器启动一个长时间运行的控制台应用程序,它将仅托管一个没有 Web 内容的网站。该网站将只启动我的长时间运行进程,并且当容器发送信号通知网站正在关闭时,我的进程可以优雅地停止。
public void Configure(IApplicationBuilder app
                , IHostingEnvironment env
                , IApplicationLifetime applicationLifetime)
{
    applicationLifetime.ApplicationStarted.Register(ApplicationStarted);
    applicationLifetime.ApplicationStopping.Register(ApplicationStopping);
    applicationLifetime.ApplicationStopped.Register(ApplicationStopped);
}

我有相同的代码,但是当执行以下命令时,.net代码中没有任何触发。 docker kill --signal=SIGTERM containerID - Ghyath Serhal

0

使用docker exec命令,您可以向运行中的Docker容器中的进程传递命令。


这份文档展示了如何通过Docker发送信号,但是我该如何在.Net Core代码中读取这个信号呢? - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接