我正在尝试将几个基于 dotnet 的功能应用程序 (v3) 迁移到 docker 容器。为此,我们使用来自mcr.microsoft.com/azure-functions/dotnet https://hub.docker.com/_/microsoft-azure-functions-dotnet作为基础
使用 docker run 进行本地测试时,经常遇到对容器的 http 调用返回错误的问题Function host is not running
结合以下 Docker CLI 输出:
Starting OpenBSD Secure Shell server: sshd.
Hosting environment: Development
Content root path: /home/site/wwwroot
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
这仅仅意味着函数应用程序不会加载/启动,但真正的原因仍然隐藏。我一直在尝试获取更多日志记录/诊断数据来确定根本原因,但到目前为止失败了。
因此,每当这种情况发生时,我都必须开始一个令人筋疲力尽的试错测试循环。到目前为止,这些情况已经花了我几天(几周?)
Question:发生此错误时如何获取更多诊断数据?
[UPDATE]Dockerfile:
FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice AS base
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:3.1-buster AS build
WORKDIR /src
# provide access to private nuget (source)
ARG FEED_SOURCE
ARG FEED_ACCESSTOKEN
RUN dotnet new nugetconfig
RUN dotnet nuget add source %FEED_SOURCE% -n PrivateFeed -u docker -p %FEED_ACCESSTOKEN% --store-password-in-clear-text --configfile nuget.config
# Restore all nuget packages by the related .csproj files
COPY ["MyCompany.MyApp.FunctionApp/MyCompany.MyApp.FunctionApp.csproj", "MyCompany.MyApp.FunctionApp/"]
RUN dotnet restore "MyCompany.MyApp.FunctionApp/MyCompany.MyApp.FunctionApp.csproj"
# Copy the rest of the project-folder's content
COPY ["MyCompany.MyApp.FunctionApp", "MyCompany.MyApp.FunctionApp"]
# build the app project
WORKDIR "/src/MyCompany.MyApp.FunctionApp"
RUN dotnet build -c Release --no-restore
FROM build AS publish
RUN dotnet publish -c Release --no-build -o /app/publish
FROM base AS final
WORKDIR /home/site/wwwroot
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AZUREFUNCTIONSJOBHOST__LOGGING__CONSOLE__ISENABLED=true
在我弄清楚 TJ Galama 的评论之前,我遇到了同样的问题,并且多次浏览了这个线程。
答案是如何诊断启动失败是将整个启动代码包装在try/catch块中:
[assembly: FunctionsStartup(typeof(My.Hr.Functions.Startup))]
namespace My.Hr.Functions;
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
}
public override void Configure(IFunctionsHostBuilder builder)
{
// try-catch to capture exceptions during startup when running in docker container
try
{
// Register the core services.
builder.Services
.AddSingleton<HrSettings>()
.AddExecutionContext();
// More setup code ...
}
catch (System.Exception ex)
{
System.Console.Error.WriteLine(ex);
throw;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)