【问题标题】:Isolated Azure Function Dockerfile隔离的 Azure 函数 Dockerfile
【发布时间】:2021-08-31 12:20:59
【问题描述】:

我正在尝试对隔离进程 .net5.0 Azure 函数进行 dockerize。但我遇到了错误。我所有的项目都针对net5.0。我的 Dockerfile 看起来像这样:

FROM mcr.microsoft.com/azure-functions/dotnet-isolated:3.0-dotnet-isolated5.0-core-tools AS build

WORKDIR /app
COPY . ./
RUN dotnet publish My.Functions -c Release -o out -r linux-x64

FROM mcr.microsoft.com/azure-functions/dotnet-isolated:3.0

ENV AzureWebJobsScriptRoot=/home/site/wwwroot
ENV AzureFunctionsJobHost__Logging__Console__IsEnabled=true
ENV FUNCTIONS_WORKER_RUNTIME=dotnet-isolated

COPY --from=build /app/out /home/site/wwwroot

我得到的错误是:

找不到任何兼容的框架版本 [/tmp/sek2ugeb.quv/WorkerExtensions.csproj] /root/.nuget/packages/microsoft.net.sdk.functions/3.0.11/build/Microsoft.NET.Sdk.Functions.Build.targets(32,5): 错误:框架'Microsoft.NETCore.App',版本'3.1.0'不是 成立。 [/tmp/sek2ugeb.quv/WorkerExtensions.csproj]

为什么它甚至尝试使用.net3.1?

我能做些什么来解决它?

【问题讨论】:

  • 当你仔细观察时,你可以看到 dotnet-isolated:3.0 所以它尝试 dotnet 3 是合乎逻辑的。看起来,你找到了构建过程的图像,但在 @987654321 上列出的图像@ 受到更多限制。
  • @b2f 构建失败...不幸的是我们没有进入启动阶段
  • 当我们查看Dockerhub 时,您的第一行仍然是dotnet-isolated:3.0-isolated5.0-core-tools,然后单击Dockerfile 的指定链接。您可以看到 .net core 3.1 sdk 的来源。也许你可以先用 net5.0 sdk 构建然后使用它。您的两个图像都使用了 dotnet/runtime:5.0 基础图像。
  • 也许你可以尝试使用Dockerfile中的命令安装依赖项。

标签: .net azure docker azure-functions .net-5


【解决方案1】:

我不得不把这个运行放在我的 dockerfile 中。它会安装 3.1 sdk。

RUN dotnet_sdk_version=3.1.409 && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz && mkdir -p /usr/share/dotnet && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet && rm dotnet.tar.gz

这是我们完整的 dotnet 隔离 Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS installer-env

RUN dotnet_sdk_version=3.1.409 && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz && mkdir -p /usr/share/dotnet && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet && rm dotnet.tar.gz

COPY . /src/dotnet-function-app/

RUN mkdir -p /home/site/wwwroot

WORKDIR /src/dotnet-function-app/*FunctionName*

RUN dotnet publish --output /home/site/wwwroot

FROM mcr.microsoft.com/azure-functions/dotnet-isolated:3.0-dotnet-isolated5.0

ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
  AzureFunctionsJobHost__Logging__Console__IsEnabled=true

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

【讨论】:

  • 是的.. 至少可以说这一切都很不愉快。我决定将我的代码移动到工作服务中,而完全忘记函数。我现在比以往任何时候都更快乐。
猜你喜欢
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多