我有一个用.Net Core编写的控制台应用程序。我将在Docker容器中运行它。我希望在给出docker stop命令时优雅地停止进程,而不是让进程在做某事的过程中被杀死。有没有办法可以在控制台应用程序中监听此信号?在容器之前,我只是让控制台应用程序监听在控制台窗口中输入的内容。如果有一种方法让docker通过标准输入发送消息,我可以使用它,我对Docker知之甚少,但是,知道什么是可能的。
答案 0 :(得分:1)
毕竟,我的解决方案最终是不使用控制台应用程序。我了解到,如果我创建一个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);
}
答案 1 :(得分:0)
您可以使用docker exec
将命令传递到Docker容器中正在运行的进程