我正在docker容器中运行BackgroundService
,但有时在启动时,可能还没有准备好在另一个容器上运行依赖项。因此,我创建了一个CriticalHostedService
类,该类在发生崩溃时重新启动Docker容器。
public abstract class CriticalHostedService : BackgroundService
{
private readonly IServiceProvider serviceProvider;
public override async Task StartAsync(CancellationToken cancellationToken)
{
try
{
await ExecuteAsync(cancellationToken);
}
catch (Exception e)
{
FatalExit();
throw;
}
}
/// <summary>
/// Make sure the service restart when there is an error
/// </summary>
private void FatalExit()
{
((IApplicationLifetime)serviceProvider
.GetService(typeof(IApplicationLifetime)))
.StopApplication();
}
}
现在这可以在linux容器上正常工作了。调用FatalExit时,容器停止并从我的docker-compose策略restart: always
重新启动。
但是对于Windows容器,该容器保持运行状态,并且日志中没有任何内容。
我应该如何从.net核心应用程序内部重新启动Windows docker?