Как перезапустить докер контейнер из .net core - PullRequest
0 голосов
/ 28 февраля 2019

Я запускаю 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?

...