You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function App访问提示Function host is not running问题排查

Azure Function App 部署后访问返回「Function host is not running」修复方案

问题现象

  • 项目本地调试运行完全正常,CI/CD构建、发布流水线全部执行成功,新建Function App重新部署后问题仍未解决
  • 已通过Application Insights、Azure门户函数服务面板查看日志,确认存在「Function host is not running」报错
  • 报错参考截图:
    报错截图
  • 问题项目原有Startup.cs配置逻辑如下:
public override void Configure(IFunctionsHostBuilder builder)
{
    //var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings:DBConnection");

    var serviceProvider = builder.Services.BuildServiceProvider();
    _configuration = serviceProvider.GetRequiredService<IConfiguration>();
    var appSettingsSection = _configuration.GetSection("AppSettings");
    builder.Services.Configure<AppSettings>(appSettingsSection);
    var appSettings = appSettingsSection.Get<AppSettings>();
    RuntimeConfig.appsettings = appSettings;

    var ConnectionString = RuntimeConfig.appsettings.AppDBConnection;
    ///builder.Services.AddDbContext<ShardingDbContext>(options => options.UseSqlServer(ConnectionString), ServiceLifetime.Transient);
    //builder.Services.AddScoped<ITestService, TestService>();
}

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
    FunctionsHostBuilderContext context = builder.GetContext();

    builder.ConfigurationBuilder
        .AddJsonFile(Path.Combine(context.ApplicationRootPath, "local.settings.json"), optional: true, reloadOnChange: false)
        .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"{context.EnvironmentName}.settings.json"), optional: true, reloadOnChange: false)
        .AddEnvironmentVariables();
}

问题根因

  1. 核心触发点:在Configure方法中手动调用builder.Services.BuildServiceProvider()会生成独立于Azure Functions运行时根容器的服务提供器副本,造成容器冲突,云端生产环境运行时会在启动阶段直接抛出致命错误,导致Function Host无法启动。本地调试用的Core Tools校验规则较宽松,不会拦截该操作,因此本地运行正常。
  2. 配置读取逻辑不规范:通过手动构建的服务提供器获取IConfiguration实例,会出现配置加载顺序异常,且local.settings.json默认不会随发布流程上传到云端,很容易出现配置缺失触发空引用,进一步导致Host启动失败。

修复步骤

  • 移除Configure方法中手动调用BuildServiceProvider()的逻辑,直接通过Functions运行时上下文获取IConfiguration实例,避免容器冲突
  • 修正配置绑定逻辑,不需要提前构建容器即可完成配置读取与绑定
  • 所有云端运行所需的配置项,不要依赖本地json文件,需要在Azure Function App门户的「配置-应用程序设置」面板中手动添加,层级配置用:分隔即可(例如AppSettings:AppDBConnection),运行时会自动加载到IConfiguration中

修正后的Startup.cs代码如下:

public override void Configure(IFunctionsHostBuilder builder)
{
    // 直接从运行时上下文获取配置,无需手动构建服务提供器
    var executionContext = builder.GetContext();
    IConfiguration configuration = executionContext.Configuration;
    
    var appSettingsSection = configuration.GetSection("AppSettings");
    builder.Services.Configure<AppSettings>(appSettingsSection);
    // 直接从配置节绑定实例,不需要从服务容器解析
    var appSettings = appSettingsSection.Get<AppSettings>();
    RuntimeConfig.appsettings = appSettings;

    var connectionString = appSettings.AppDBConnection;
    // 按需取消注释注册服务即可
    // builder.Services.AddDbContext<ShardingDbContext>(options => options.UseSqlServer(connectionString), ServiceLifetime.Transient);
    // builder.Services.AddScoped<ITestService, TestService>();
}

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
    FunctionsHostBuilderContext context = builder.GetContext();

    builder.ConfigurationBuilder
        .AddJsonFile(Path.Combine(context.ApplicationRootPath, "local.settings.json"), optional: true, reloadOnChange: false)
        .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"{context.EnvironmentName}.settings.json"), optional: true, reloadOnChange: false)
        .AddEnvironmentVariables();
}

验证方式

  • 替换上述修正后的代码,重新通过流水线发布
  • 检查Azure Function App配置面板,确认所有需要的应用设置都已正确添加
  • 重启Function App,等待2-3分钟待宿主完全启动后,再访问函数URL即可正常响应

注意:如果重启后仍有报错,可以在Kudu站点中查看D:\home\LogFiles\Application\Functions\Host目录下的宿主日志,会打印具体的启动失败堆栈信息方便进一步排查。

内容的提问来源于stack exchange,提问作者Md Aslam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:03:25