Я запускаю BackgroundService
внутри контейнера докера, но иногда, когда он запускается, зависимость, работающая с другим контейнером, может быть еще не готова.Поэтому я создал класс CriticalHostedService
, который аварийно завершает работу, чтобы перезапустить докер-контейнер, когда это происходит.
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 контейнер продолжает работать, и в журналах ничего не появляется.
Какмне перезапустить Windows Docker из моего основного приложения .net?