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(); }
问题根因
- 核心触发点:在
Configure方法中手动调用builder.Services.BuildServiceProvider()会生成独立于Azure Functions运行时根容器的服务提供器副本,造成容器冲突,云端生产环境运行时会在启动阶段直接抛出致命错误,导致Function Host无法启动。本地调试用的Core Tools校验规则较宽松,不会拦截该操作,因此本地运行正常。 - 配置读取逻辑不规范:通过手动构建的服务提供器获取
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
相关产品推荐
相关产品推荐

