Служба приложений Azure в Linux: «Контейнер не ответил на запросы HTTP на порту: 8080, не удалось запустить сайт», но мой контейнер не является веб-сервером

У меня есть контейнер с .Net Host и фоновой службой, работающей в нем. Он отлично работает на моем Mac. При развертывании в Службе приложений Azure в Linux оно запускается, а затем немедленно завершается. Мне кажется, что Служба приложений Azure в Linux ожидает, что контейнер будет отвечать на запросы HTTP, но мой контейнер является фоновой службой, а не веб-сервером, и не предоставляет никаких портов. Как обеспечить бесперебойную работу моего закрепленного на докере хоста .Net с BackgroundService в Службе приложений Azure для Linux?

Должен ли я преобразовать его в веб-хост только для того, чтобы он отвечал на пинги? Должен ли я использовать какой-либо другой тип инфраструктуры Azure (контейнерные приложения?) Могу ли я отключить HTTP-пинги? (На портале нет очевидного способа сделать это) Есть еще мысли?

Логи выглядят так.

2024-04-26T19:45:41.663Z INFO  - Starting container for site
2024-04-26T19:45:41.663Z INFO  - docker run -d -p 4665:8080 --name redactedappname1302_0_61646b2f -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e WEBSITES_PORT=8080 -e WEBSITE_SITE_NAME=redactedappname1302 -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=redactedappname1302.azurewebsites.net -e WEBSITE_INSTANCE_ID=2c847a802c8040b33d7df73fac3a50614d8069754a88be4922fa1677ca17ce3d -e HTTP_LOGGING_ENABLED=1 redactedregistryname.azurecr.io/redactedappname:20240426.20.2cf015ff -p 80:8080
2024-04-26T19:45:44.387Z INFO  - Initiating warmup request to container redactedappname1302_0_61646b2f for site redactedappname1302
2024-04-26T19:45:49.146Z ERROR - Container redactedappname1302_0_61646b2f for site redactedappname1302 has exited, failing site start
2024-04-26T19:45:49.159Z ERROR - Container redactedappname1302_0_61646b2f didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.
2024-04-26T19:45:49.233Z INFO  - Stopping site redactedappname1302 because it failed during startup.

Код (отредактированный по соображениям IP/работодателя и C!) выглядит так..


var builder = Host.CreateDefaultBuilder();

builder.ConfigureAppConfiguration((context, configBuilder) =>
{
//redacted, configuring logging, all working locally
});

builder.ConfigureServices((context, services) =>
{
    services.
          //Add various services, redacted, all working locally
          //most importantly, add MyBackgroundService
        .AddHostedService<MyBackgroundService>(); 
});

Log.Information("Starting ...");

var app = builder.Build();

try
{
    await app.RunAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex);
    Log.Error(ex, "Failure");
}

Если возможно, можете ли вы поделиться своим кодом?

Sirra Sneha 27.04.2024 05:25

Что находится внутри фоновой службы?

sa-es-ir 27.04.2024 06:57

Тогда очевидно, что вместо этого вам следует использовать другой эго-хост службы Azure, например AKS.

Lex Li 27.04.2024 08:24

Попробуйте добавить команду Startupcommand в службу приложений Azure как dotnet YourLocalProjectName.dll. Проверьте это Изображение

Sirra Sneha 27.04.2024 08:52
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
4
248
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Должен ли я преобразовать его в веб-хост только для того, чтобы он отвечал на пинги? Должен ли я использовать какой-либо другой тип инфраструктуры Azure (контейнерные приложения?) Могу ли я отключить HTTP-пинги? (На портале нет очевидного способа сделать это) Есть еще мысли?

Преобразуйте свое приложение в веб-хостинг, чтобы отвечать на запросы ping. Я создал простое приложение и работающую в нем фоновую службу.

Это моя программа.cs:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddHostedService<MyBackgroundService>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(options =>
   {      options.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
        if (app.Environment.IsDevelopment())
            options.RoutePrefix = "swagger";
        else
            options.RoutePrefix = string.Empty;
    }
    );
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

BackgroundService.cs:

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
public class MyBackgroundService : BackgroundService
{
    private readonly ILogger<MyBackgroundService> _logger;
    public MyBackgroundService(ILogger<MyBackgroundService> logger)
    {
        _logger = logger;
    }
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Background service is running.");
            Console.WriteLine("Background service is running."); 
            await Task.Delay(5000, stoppingToken); 
        }
    }
}

ЛокальныйВывод:

Развернули приложение через реестр контейнеров Azure:

Добавьте команду запуска, указав сведения о реестре контейнеров Azure.

Вот поток журнала:

Другие вопросы по теме

Как загрузить файл и папку в библиотеку документов SharePoint с помощью API Graph на C#?
Возникла проблема после развертывания образа докера net 8 в контейнере веб-приложения Azure (Linux)
Почему фиксированный общедоступный IP-адрес будет потерян при обновлении службы приложений в Azure
Как настроить поддержку службы приложений Azure для корневого/голого домена?
Возникает ошибка при попытке использовать предварительно созданную модель контракта в AI Document Intelligence Studio. Код ошибки в теле
Размещение приложения Django в службе приложений Azure
Статическое веб-приложение Azure с действиями Git [ошибка действий Git]
Потоковая передача ответа в веб-API ASP.NET Core 6, работающем локально, но не в веб-приложении Azure, размещенном в Windows
Веб-приложение (Linux) — BadGateway/Запрещено — подписке не разрешено создавать или обновлять ферму серверов
Подключитесь к частной конечной точке службы приложений Azure