Linux 容器上的 Azure Function 的 Docker 问题 - 函数缺失导致函数运行时出现 404

2024-01-08

这个问题是这个问题的延续:在 Linux 容器上触发 Azure 函数 HTTP - 函数不起作用 404 https://stackoverflow.com/questions/61567697/azure-function-http-triggered-on-linux-container-function-not-working-404/61711254#61711254

上一篇更多的是找出根本原因。 MS 支持人员指出,根本原因可能是什么(但这仍有待确认;))

首先,这是我的文件夹结构(这很重要,因为网上的大多数示例都假设 dockerfile 在项目文件夹中。一旦您有要构建的引用库,这是不可能的)

Solution (root folder of project)
    [Project] BuildChat <-- Referenced project by MyFunctionFolder
    [Project] MyFunctionFolder
        MyFunctionFolder.csproj
        MyFunctionFolderFunc.cs <-- Inside this file there is method run with [FunctionName("MyFunctionFolderFunc")]
        [All Files] RestOfAzureFunctionFiles
    [File] MyFunctionFolderDocker

我的初始 docker 文件(由 MS 工具创建,添加 -> Docker 支持)是:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/azure-functions/dotnet:3.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["BuildChat/BuildChat.csproj", "BuildChat/"]
COPY ["MyFunctionFolder/MyFunctionFolder.csproj", "MyFunctionFolder/"]
RUN dotnet restore "MyFunctionFolder/MyFunctionFolder.csproj"
COPY . .
WORKDIR "/src/MyFunctionFolder"
RUN dotnet build "MyFunctionFolder.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyFunctionFolder.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/app

在得到支持人员女士的答复后(我需要将其放在 /home/site/wwwroot 中),最好是使用:

func init LocalFunctionsProject --worker-runtime dotnet --docker

我确实想出了我当前的 docker 文件:

FROM mcr.microsoft.com/azure-functions/dotnet:3.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["BuildChat/BuildChat.csproj", "BuildChat/"]
COPY ["MyFunctionFolder/MyFunctionFolder.csproj", "MyFunctionFolder/"]
RUN dotnet restore "MyFunctionFolder/MyFunctionFolder.csproj"
COPY . .
WORKDIR "/src/MyFunctionFolder"
RUN dotnet build "MyFunctionFolder.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyFunctionFolder.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/app

我创建的模板文件是:

FROM microsoft/dotnet:2.2-sdk AS installer-env

COPY . /src/dotnet-function-app
RUN cd /src/dotnet-function-app && \
    mkdir -p /home/site/wwwroot && \
    dotnet publish *.csproj --output /home/site/wwwroot

# To enable ssh & remote debugging on app service change the base image to the one below
# FROM mcr.microsoft.com/azure-functions/dotnet:2.0-appservice 
FROM mcr.microsoft.com/azure-functions/dotnet:2.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true

COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]

我必须包含引用的项目并更改图像以适合 Azure function 3 版本(此模板显然适用于版本 2)我还添加了还原包步骤。

但它不起作用(与前一个一样)而且我现在有点沮丧:D 我正在互联网上查找,我看到了数十个 docker 文件,据称这些文件适用于其作者发布 azure 功能。

例如在此 SOF 中:通过 Docker 和 Visual Studio 发布到 Azure 时,Azure 函数 HTTP 请求 404 https://stackoverflow.com/questions/60214662/azure-function-http-request-404-when-published-to-azure-through-docker-and-visua?rq=1

在接受的答案中,dockerfile 是:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

COPY . ./
RUN dotnet publish myfunction -c Release -o myfunction /out

FROM mcr.microsoft.com/azure-functions/dotnet:3.0 AS base
WORKDIR /app
EXPOSE 80

COPY --from=build-env /app/ao-backendfunctions/out .

ENV AzureWebJobsScriptRoot=/app
ENV AzureFunctionsJobHost__Logging__Console__IsEnabled=true

在这个例子中 - 显然它是在/app文件夹(不在/home/site/wwwroot) - wtf?:D

这张票的作者发布了一个答案,这对他来说确实有效 - 与上面的完全不同:

FROM mcr.microsoft.com/azure-functions/dotnet:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /src
COPY ["FunctionTestAppLinux/FunctionTestAppLinux.csproj", "FunctionTestAppLinux/"]
RUN dotnet restore "FunctionTestAppLinux/FunctionTestAppLinux.csproj"
COPY . .
WORKDIR "/src/FunctionTestAppLinux"
RUN dotnet build "FunctionTestAppLinux.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "FunctionTestAppLinux.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/app

仍然 - 发布到/app :)

在一些博客上:https://spin.atomicobject.com/2020/01/09/azure-functions-docker-container/ https://spin.atomicobject.com/2020/01/09/azure-functions-docker-container/版本是:

FROM microsoft/azure-functions-dotnet-core2.0:2.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
COPY ./bin/Release/netstandard2.0 /home/site/wwwroot

在另一个博客上(https://blog.gutek.pl/2018/03/12/azure-functions-w-docker/ https://blog.gutek.pl/2018/03/12/azure-functions-w-docker/)工作版本是:

FROM microsoft/azure-functions-runtime:2.0.0-jessie
ENV AzureWebJobsScriptRoot=/home/site/wwwroot

COPY . /home/site/wwwroot

无需任何构建,恢复nuget包。

说实话,我完全脑子被操了:)我明白,有时有不止一种方法可以达到相同的目的,但显然AzureWebJobsScriptRoot不可能是/home/site/wwwroot and /app同时:)两个版本似乎都适用于不同的人:)

以下是我的容器构建中来自 Azure 门户的日志:

2020_05_10_RD501AC582A899_docker.log:
2020-05-10 11:17:58.951 INFO  - Recycling container because of AppFrameworkVersionChange and appFrameworkVersion = myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1
2020-05-10 11:18:12.234 INFO  - Pulling image: myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1
2020-05-10 11:18:15.314 INFO  - 20200510.1 Pulling from mobile/myazurefunctionfolder
2020-05-10 11:18:15.315 INFO  - 54fec2fa59d0 Already exists
2020-05-10 11:18:15.315 INFO  - 573788d8ba26 Already exists
2020-05-10 11:18:15.315 INFO  - 65471ff99618 Already exists
2020-05-10 11:18:15.315 INFO  - bc784bb97e07 Already exists
2020-05-10 11:18:15.315 INFO  - 5b12b0dacfda Pulling fs layer
2020-05-10 11:18:15.315 INFO  - 5b12b0dacfda Downloading 4MB / 21MB
2020-05-10 11:18:15.316 INFO  - 5b12b0dacfda Downloading 11MB / 21MB
2020-05-10 11:18:15.317 INFO  - 5b12b0dacfda Downloading 14MB / 21MB
2020-05-10 11:18:18.346 INFO  - 5b12b0dacfda Downloading 19MB / 21MB
2020-05-10 11:18:18.347 INFO  - 5b12b0dacfda Verifying Checksum
2020-05-10 11:18:18.347 INFO  - 5b12b0dacfda Download complete
2020-05-10 11:18:18.363 INFO  - 5b12b0dacfda Extracting 448KB / 21MB
2020-05-10 11:18:18.384 INFO  - 5b12b0dacfda Extracting 896KB / 21MB
2020-05-10 11:18:19.878 INFO  - 5b12b0dacfda Extracting 2MB / 21MB
2020-05-10 11:18:19.972 INFO  - 5b12b0dacfda Extracting 3MB / 21MB
2020-05-10 11:18:19.972 INFO  - 5b12b0dacfda Extracting 4MB / 21MB
2020-05-10 11:18:19.973 INFO  - 5b12b0dacfda Extracting 6MB / 21MB
2020-05-10 11:18:19.973 INFO  - 5b12b0dacfda Extracting 6MB / 21MB
2020-05-10 11:18:19.973 INFO  - 5b12b0dacfda Extracting 7MB / 21MB
2020-05-10 11:18:21.199 INFO  - 5b12b0dacfda Extracting 9MB / 21MB
2020-05-10 11:18:21.549 INFO  - 5b12b0dacfda Extracting 10MB / 21MB
2020-05-10 11:18:21.761 INFO  - 5b12b0dacfda Extracting 11MB / 21MB
2020-05-10 11:18:21.966 INFO  - 5b12b0dacfda Extracting 11MB / 21MB
2020-05-10 11:18:22.227 INFO  - 5b12b0dacfda Extracting 12MB / 21MB
2020-05-10 11:18:22.472 INFO  - 5b12b0dacfda Extracting 12MB / 21MB
2020-05-10 11:18:22.763 INFO  - 5b12b0dacfda Extracting 13MB / 21MB
2020-05-10 11:18:23.183 INFO  - 5b12b0dacfda Extracting 13MB / 21MB
2020-05-10 11:18:23.362 INFO  - 5b12b0dacfda Extracting 14MB / 21MB
2020-05-10 11:18:23.755 INFO  - 5b12b0dacfda Extracting 14MB / 21MB
2020-05-10 11:18:24.831 INFO  - 5b12b0dacfda Extracting 14MB / 21MB
2020-05-10 11:18:25.302 INFO  - 5b12b0dacfda Extracting 15MB / 21MB
2020-05-10 11:18:25.605 INFO  - 5b12b0dacfda Extracting 16MB / 21MB
2020-05-10 11:18:25.857 INFO  - 5b12b0dacfda Extracting 16MB / 21MB
2020-05-10 11:18:26.230 INFO  - 5b12b0dacfda Extracting 17MB / 21MB
2020-05-10 11:18:27.029 INFO  - 5b12b0dacfda Extracting 17MB / 21MB
2020-05-10 11:18:27.276 INFO  - 5b12b0dacfda Extracting 18MB / 21MB
2020-05-10 11:18:27.394 INFO  - 5b12b0dacfda Extracting 18MB / 21MB
2020-05-10 11:18:27.843 INFO  - 5b12b0dacfda Extracting 19MB / 21MB
2020-05-10 11:18:28.127 INFO  - 5b12b0dacfda Extracting 19MB / 21MB
2020-05-10 11:18:28.801 INFO  - 5b12b0dacfda Extracting 21MB / 21MB
2020-05-10 11:18:30.263 INFO  - 5b12b0dacfda Pull complete
2020-05-10 11:18:30.360 INFO  -  Digest: sha256:b3245ab363778662212e218dfc62f6fe1bcbb868de4edebeb975692264e39360
2020-05-10 11:18:30.408 INFO  -  Status: Downloaded newer image for myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1
2020-05-10 11:18:30.436 INFO  - Pull Image successful, Time taken: 0 Minutes and 18 Seconds
2020-05-10 11:18:30.473 INFO  - Starting container for site
2020-05-10 11:18:30.473 INFO  - docker run -d -p 7266:80 --name myazurefunctionfolder_7_60c643dd -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myazurefunctionfolder -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myazurefunctionfolder.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1  

2020-05-10 11:18:41.180 INFO  - Starting container for site
2020-05-10 11:18:41.180 INFO  - docker run -d -p 7751:8081 --name myazurefunctionfolder_7_60c643dd_middleware -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myazurefunctionfolder -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myazurefunctionfolder.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 appsvc/middleware:2001061754 /Host.ListenUrl=http://0.0.0.0:8081 /Host.DestinationHostUrl=http://172.16.1.6:80 /Host.UseFileLogging=true 

2020-05-10 11:18:46.446 INFO  - Initiating warmup request to container myazurefunctionfolder_7_60c643dd for site myazurefunctionfolder
2020-05-10 11:19:02.506 INFO  - Waiting for response to warmup request for container myazurefunctionfolder_7_60c643dd. Elapsed time = 16.0677747 sec
2020-05-10 11:19:18.517 INFO  - Waiting for response to warmup request for container myazurefunctionfolder_7_60c643dd. Elapsed time = 32.0791795 sec
2020-05-10 11:19:36.436 INFO  - Waiting for response to warmup request for container myazurefunctionfolder_7_60c643dd. Elapsed time = 49.9977817 sec
2020-05-10 11:20:05.041 INFO  - Container myazurefunctionfolder_7_60c643dd for site myazurefunctionfolder initialized successfully and is ready to serve requests.
2020-05-10 11:20:05.042 INFO  - Initiating warmup request to container myazurefunctionfolder_7_60c643dd_middleware for site myazurefunctionfolder
2020-05-10 11:20:11.370 INFO  - Container myazurefunctionfolder_7_60c643dd_middleware for site myazurefunctionfolder initialized successfully and is ready to serve requests.
2020-05-10 11:20:28.875 INFO  - Pulling image: myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1
2020-05-10 11:20:32.177 INFO  - 20200510.1 Pulling from mobile/myazurefunctionfolder
2020-05-10 11:20:32.178 INFO  -  Digest: sha256:b3245ab363778662212e218dfc62f6fe1bcbb868de4edebeb975692264e39360
2020-05-10 11:20:32.179 INFO  -  Status: Image is up to date for myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1
2020-05-10 11:20:32.198 INFO  - Pull Image successful, Time taken: 0 Minutes and 3 Seconds
2020-05-10 11:20:32.565 INFO  - Starting container for site
2020-05-10 11:20:32.566 INFO  - docker run -d -p 6657:80 --name myazurefunctionfolder_8_08a93355 -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myazurefunctionfolder -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myazurefunctionfolder.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 myazurefunctionendpoint.azurecr.io/mobile/myazurefunctionfolder:20200510.1  

2020-05-10 11:20:41.614 INFO  - Starting container for site
2020-05-10 11:20:41.615 INFO  - docker run -d -p 7109:8081 --name myazurefunctionfolder_8_08a93355_middleware -e WEBSITE_CORS_ALLOWED_ORIGINS=https://functions.azure.com,https://functions-staging.azure.com,https://functions-next.azure.com -e WEBSITE_CORS_SUPPORT_CREDENTIALS=False -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=myazurefunctionfolder -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myazurefunctionfolder.azurewebsites.net -e WEBSITE_INSTANCE_ID=8da8a02a13a3cdde53ad6aafcd4eb717ca00dd6bc65ff07378d74a0cd859e1c0 -e HTTP_LOGGING_ENABLED=1 appsvc/middleware:2001061754 /Host.ListenUrl=http://0.0.0.0:8081 /Host.DestinationHostUrl=http://172.16.1.3:80 /Host.UseFileLogging=true 

2020-05-10 11:20:46.733 INFO  - Initiating warmup request to container myazurefunctionfolder_8_08a93355 for site myazurefunctionfolder
2020-05-10 11:21:02.494 INFO  - Waiting for response to warmup request for container myazurefunctionfolder_8_08a93355. Elapsed time = 15.7612638 sec
2020-05-10 11:21:16.882 INFO  - Container myazurefunctionfolder_8_08a93355 for site myazurefunctionfolder initialized successfully and is ready to serve requests.
2020-05-10 11:21:16.891 INFO  - Initiating warmup request to container myazurefunctionfolder_8_08a93355_middleware for site myazurefunctionfolder
2020-05-10 11:21:18.256 INFO  - Container myazurefunctionfolder_8_08a93355_middleware for site myazurefunctionfolder initialized successfully and is ready to serve requests.
2020_05_10_RD501AC582A899_default_docker.log:
2020-05-10T11:20:50.028672036Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Script.ChangeAnalysis.BlobChangeAnalysisStateProvider[0]
2020-05-10T11:20:50.031226105Z       Last analysis flag value '2020-05-09T23:53:16.4731910+00:00'.
2020-05-10T11:20:50.291657401Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Script.ChangeAnalysis.ChangeAnalysisService[0]
2020-05-10T11:20:50.291850999Z       Skipping breaking change analysis.

2020-05-10T11:21:12.339552452Z [40m[32minfo[39m[22m[49m: Host.Triggers.Warmup[0]
2020-05-10T11:21:12.339591252Z       Initializing Warmup Extension.
2020-05-10T11:21:13.581571261Z [40m[32minfo[39m[22m[49m: Host.Startup[503]
2020-05-10T11:21:13.581610761Z       Initializing Host. OperationId: '04df8392-1653-4549-a89a-cfe29851ceb6'.
2020-05-10T11:21:13.602683110Z [40m[32minfo[39m[22m[49m: Host.Startup[504]
2020-05-10T11:21:13.602699410Z       Host initialization: ConsecutiveErrors=0, StartupCount=1, OperationId=04df8392-1653-4549-a89a-cfe29851ceb6
2020-05-10T11:21:13.776183144Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.776221943Z       ApplicationInsightsLoggerOptions
2020-05-10T11:21:13.776228243Z       {
2020-05-10T11:21:13.776231943Z         "SamplingSettings": {
2020-05-10T11:21:13.776235843Z           "EvaluationInterval": "00:00:15",
2020-05-10T11:21:13.776239743Z           "InitialSamplingPercentage": 100.0,
2020-05-10T11:21:13.783177961Z           "MaxSamplingPercentage": 100.0,
2020-05-10T11:21:13.783190860Z           "MaxTelemetryItemsPerSecond": 20.0,
2020-05-10T11:21:13.783196060Z           "MinSamplingPercentage": 0.1,
2020-05-10T11:21:13.783199560Z           "MovingAverageRatio": 0.25,
2020-05-10T11:21:13.783203160Z           "SamplingPercentageDecreaseTimeout": "00:02:00",
2020-05-10T11:21:13.783206760Z           "SamplingPercentageIncreaseTimeout": "00:15:00"
2020-05-10T11:21:13.783210460Z         },
2020-05-10T11:21:13.783213660Z         "SamplingExcludedTypes": null,
2020-05-10T11:21:13.783217060Z         "SamplingIncludedTypes": null,
2020-05-10T11:21:13.783220260Z         "SnapshotConfiguration": null,
2020-05-10T11:21:13.783223460Z         "EnablePerformanceCountersCollection": true,
2020-05-10T11:21:13.783226860Z         "HttpAutoCollectionOptions": {
2020-05-10T11:21:13.783238260Z           "EnableHttpTriggerExtendedInfoCollection": true,
2020-05-10T11:21:13.783241660Z           "EnableW3CDistributedTracing": true,
2020-05-10T11:21:13.783244960Z           "EnableResponseHeaderInjection": true
2020-05-10T11:21:13.783248360Z         },
2020-05-10T11:21:13.783270959Z         "LiveMetricsInitializationDelay": "00:00:15",
2020-05-10T11:21:13.783274659Z         "EnableLiveMetrics": true,
2020-05-10T11:21:13.783278159Z         "EnableDependencyTracking": true
2020-05-10T11:21:13.783281959Z       }
2020-05-10T11:21:13.793179241Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.793194241Z       LoggerFilterOptions
2020-05-10T11:21:13.793198841Z       {
2020-05-10T11:21:13.793209541Z         "MinLevel": "None",
2020-05-10T11:21:13.793213241Z         "Rules": [
2020-05-10T11:21:13.793216641Z           {
2020-05-10T11:21:13.793219741Z             "ProviderName": null,
2020-05-10T11:21:13.793222941Z             "CategoryName": null,
2020-05-10T11:21:13.793616636Z             "LogLevel": null,
2020-05-10T11:21:13.793626936Z             "Filter": "<AddFilter>b__0"
2020-05-10T11:21:13.793631436Z           },
2020-05-10T11:21:13.793634836Z           {
2020-05-10T11:21:13.793638236Z             "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
2020-05-10T11:21:13.793642036Z             "CategoryName": null,
2020-05-10T11:21:13.793645536Z             "LogLevel": "None",
2020-05-10T11:21:13.793668236Z             "Filter": null
2020-05-10T11:21:13.793671936Z           },
2020-05-10T11:21:13.793675336Z           {
2020-05-10T11:21:13.793678835Z             "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
2020-05-10T11:21:13.793682635Z             "CategoryName": null,
2020-05-10T11:21:13.793686235Z             "LogLevel": null,
2020-05-10T11:21:13.793689835Z             "Filter": "<AddFilter>b__0"
2020-05-10T11:21:13.793714535Z           },
2020-05-10T11:21:13.793717835Z           {
2020-05-10T11:21:13.793721335Z             "ProviderName": "Microsoft.Azure.WebJobs.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider",
2020-05-10T11:21:13.793742835Z             "CategoryName": null,
2020-05-10T11:21:13.793746535Z             "LogLevel": "Trace",
2020-05-10T11:21:13.793769834Z             "Filter": null
2020-05-10T11:21:13.793773834Z           }
2020-05-10T11:21:13.793777534Z         ]
2020-05-10T11:21:13.793781234Z       }
2020-05-10T11:21:13.794979520Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.794992920Z       LoggerFilterOptions
2020-05-10T11:21:13.794997120Z       {
2020-05-10T11:21:13.795000320Z         "MinLevel": "None",
2020-05-10T11:21:13.795003820Z         "Rules": [
2020-05-10T11:21:13.795007220Z           {
2020-05-10T11:21:13.795010420Z             "ProviderName": null,
2020-05-10T11:21:13.795013820Z             "CategoryName": null,
2020-05-10T11:21:13.795385015Z             "LogLevel": null,
2020-05-10T11:21:13.795404015Z             "Filter": "<AddFilter>b__0"
2020-05-10T11:21:13.795408915Z           },
2020-05-10T11:21:13.795418615Z           {
2020-05-10T11:21:13.795422415Z             "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
2020-05-10T11:21:13.795426215Z             "CategoryName": null,
2020-05-10T11:21:13.795429615Z             "LogLevel": "None",
2020-05-10T11:21:13.795432915Z             "Filter": null
2020-05-10T11:21:13.795436415Z           },
2020-05-10T11:21:13.795439614Z           {
2020-05-10T11:21:13.795442814Z             "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
2020-05-10T11:21:13.795446414Z             "CategoryName": null,
2020-05-10T11:21:13.795449814Z             "LogLevel": null,
2020-05-10T11:21:13.795453114Z             "Filter": "<AddFilter>b__0"
2020-05-10T11:21:13.795456614Z           },
2020-05-10T11:21:13.795459814Z           {
2020-05-10T11:21:13.795463114Z             "ProviderName": "Microsoft.Azure.WebJobs.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider",
2020-05-10T11:21:13.795466614Z             "CategoryName": null,
2020-05-10T11:21:13.795469914Z             "LogLevel": "Trace",
2020-05-10T11:21:13.795473314Z             "Filter": null
2020-05-10T11:21:13.795476814Z           }
2020-05-10T11:21:13.795480014Z         ]
2020-05-10T11:21:13.795483214Z       }
2020-05-10T11:21:13.802636929Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.802651229Z       FunctionResultAggregatorOptions
2020-05-10T11:21:13.802655629Z       {
2020-05-10T11:21:13.802659029Z         "BatchSize": 1000,
2020-05-10T11:21:13.802662528Z         "FlushTimeout": "00:00:30",
2020-05-10T11:21:13.802666128Z         "IsEnabled": true
2020-05-10T11:21:13.802669428Z       }
2020-05-10T11:21:13.805165699Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.805181898Z       SingletonOptions
2020-05-10T11:21:13.805187198Z       {
2020-05-10T11:21:13.805191198Z         "LockPeriod": "00:00:15",
2020-05-10T11:21:13.805195398Z         "ListenerLockPeriod": "00:01:00",
2020-05-10T11:21:13.805614293Z         "LockAcquisitionTimeout": "10675199.02:48:05.4775807",
2020-05-10T11:21:13.805624993Z         "LockAcquisitionPollingInterval": "00:00:05",
2020-05-10T11:21:13.805629393Z         "ListenerLockRecoveryPollingInterval": "00:01:00"
2020-05-10T11:21:13.805633393Z       }
2020-05-10T11:21:13.812751908Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.OptionsLoggingService[0]
2020-05-10T11:21:13.812774608Z       HttpOptions
2020-05-10T11:21:13.812780508Z       {
2020-05-10T11:21:13.812784508Z         "DynamicThrottlesEnabled": false,
2020-05-10T11:21:13.812788608Z         "MaxConcurrentRequests": -1,
2020-05-10T11:21:13.812792608Z         "MaxOutstandingRequests": -1,
2020-05-10T11:21:13.813337301Z         "RoutePrefix": "api"
2020-05-10T11:21:13.813366201Z       }
2020-05-10T11:21:13.843389543Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Hosting.JobHostService[0]
2020-05-10T11:21:13.843424743Z       Starting JobHost
2020-05-10T11:21:13.884952349Z [40m[32minfo[39m[22m[49m: Host.Startup[401]
2020-05-10T11:21:13.885667840Z       Starting Host (HostId=myazurefunctionfolder, InstanceId=a8213304-1777-4fb6-bc2d-f80e6b2bee97, Version=3.0.13113, ProcessId=1, AppDomainId=1, InDebugMode=False, InDiagnosticMode=False, FunctionsExtensionVersion=~3)
2020-05-10T11:21:13.912127225Z [40m[32minfo[39m[22m[49m: Host.Startup[314]
2020-05-10T11:21:13.912142725Z       Loading functions metadata
2020-05-10T11:21:14.081233911Z [40m[32minfo[39m[22m[49m: Host.Startup[315]
2020-05-10T11:21:14.081272511Z       0 functions loaded
2020-05-10T11:21:14.155195930Z [40m[32minfo[39m[22m[49m: Host.Startup[0]
2020-05-10T11:21:14.155225030Z       Generating 0 job function(s)
2020-05-10T11:21:14.258576699Z [40m[1m[33mwarn[39m[22m[49m: Host.Startup[0]
2020-05-10T11:21:14.259122493Z       No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
2020-05-10T11:21:14.286182370Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Script.WebHost.WebScriptHostHttpRoutesManager[0]
2020-05-10T11:21:14.286203070Z       Initializing function HTTP routes
2020-05-10T11:21:14.286208270Z       No HTTP routes mapped
2020-05-10T11:21:14.286211970Z       
2020-05-10T11:21:14.304709550Z [40m[32minfo[39m[22m[49m: Host.Startup[412]
2020-05-10T11:21:14.304724350Z       Host initialized (394ms)
2020-05-10T11:21:14.335396884Z [40m[32minfo[39m[22m[49m: Host.Startup[413]
2020-05-10T11:21:14.335417684Z       Host started (442ms)
2020-05-10T11:21:14.336352973Z [40m[32minfo[39m[22m[49m: Host.Startup[0]
2020-05-10T11:21:14.343789484Z       Job host started
2020-05-10T11:21:14.547358360Z Hosting environment: Production
2020-05-10T11:21:14.548308349Z Content root path: /
2020-05-10T11:21:14.548820443Z Now listening on: http://[::]:80
2020-05-10T11:21:14.548834343Z Application started. Press Ctrl+C to shut down.
2020-05-10T11:21:19.822115356Z [40m[32minfo[39m[22m[49m: Host.General[316]
2020-05-10T11:21:19.822147156Z       Host lock lease acquired by instance ID '8da8a02a13a3cdde53ad6aafcd4eb717'.

2020-05-10T11:22:14.362743624Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Script.ChangeAnalysis.BlobChangeAnalysisStateProvider[0]
2020-05-10T11:22:14.362788823Z       Last analysis flag value '2020-05-09T23:53:16.4731910+00:00'.
2020-05-10T11:22:14.367496867Z [40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Script.ChangeAnalysis.ChangeAnalysisService[0]
2020-05-10T11:22:14.367512067Z       Skipping breaking change analysis.

2020-05-10T11:35:44.307018064Z [40m[32minfo[39m[22m[49m: Host.Controllers.Host[0]
2020-05-10T11:35:44.309602433Z       Host Status: {
2020-05-10T11:35:44.309614333Z         "id": "myazurefunctionfolder",
2020-05-10T11:35:44.309619333Z         "state": "Running",
2020-05-10T11:35:44.309623733Z         "version": "3.0.13113",
2020-05-10T11:35:44.309628533Z         "versionDetails": "3.0.13113 Commit hash: 0cf47580569246787259ef2a29624cf9e8ce61b0",
2020-05-10T11:35:44.309633133Z         "processUptime": 908010
2020-05-10T11:35:44.309637533Z       }

2020-05-10T12:05:37.146645952Z [40m[32minfo[39m[22m[49m: Host.Controllers.Host[0]
2020-05-10T12:05:37.147571141Z       Host Status: {
2020-05-10T12:05:37.147582641Z         "id": "myazurefunctionfolder",
2020-05-10T12:05:37.147587441Z         "state": "Running",
2020-05-10T12:05:37.147591640Z         "version": "3.0.13113",
2020-05-10T12:05:37.147597440Z         "versionDetails": "3.0.13113 Commit hash: 0cf47580569246787259ef2a29624cf9e8ce61b0",
2020-05-10T12:05:37.147601940Z         "processUptime": 2700861
2020-05-10T12:05:37.147606140Z       }

帮助大家! ;)


对于遇到同样问题的人:最终的 docker 是:

FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["MyFunctionFolder/MyFunctionFolder.csproj", "MyFunctionFolder/"]
RUN dotnet restore "MyFunctionFolder/MyFunctionFolder.csproj"
COPY . .
WORKDIR "/src/MyFunctionFolder"
RUN dotnet build "MyFunctionFolder.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyFunctionFolder.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /home/site/wwwroot
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/home/site/wwwroot

对我来说,问题(可能是根本原因)是功能应用程序的应用程序设置之一

WEBSITE_RUN_FROM_PACKAGE

因此,它不起作用。一旦我删除了这个应用程序设置 - 它就正常工作了:)

我希望它能节省别人找到这个的时间。我只会补充一点,我没有创建这个设置(我不知道它是如何“来的”)

我必须非常感谢 Azure 支持团队帮助我找到问题;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 容器上的 Azure Function 的 Docker 问题 - 函数缺失导致函数运行时出现 404 的相关文章

随机推荐