如何从.NET Core重新启动Docker容器

时间:2019-02-28 20:49:54

标签: docker asp.net-core .net-core docker-compose docker-windows

我正在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?

0 个答案:

没有答案