Tensorflow未装入Docker容器

Tensorflow未装入Docker容器,docker,tensorflow,.net-core,ml.net,Docker,Tensorflow,.net Core,Ml.net,我正在尝试将带有ML.NET的web应用程序部署到docker容器中(在IIS Express中运行它时不会出现问题),但在visual studio创建的docker文件中运行它时,出现以下错误,表示找不到tensor flow: System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.Reflec

我正在尝试将带有ML.NET的web应用程序部署到docker容器中(在IIS Express中运行它时不会出现问题),但在visual studio创建的docker文件中运行它时,出现以下错误,表示找不到tensor flow:

System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.Reflection.TargetInvocationException:调用的目标已引发异常。 --->System.DllNotFoundException:无法加载共享库“tensorflow”或其依赖项之一。为了帮助诊断加载问题,请考虑设置LD.Debug环境变量:LbTySoFoSuro:无法打开共享对象文件:没有这样的文件或目录 在Tensorflow.c_api.TF_NewGraph()中 在Tensorflow.Graph..ctor()处 位于Microsoft.ML.TensorFlow.TensorFlowUtils.LoadTFSession(IEExceptionContext ectx,Byte[]modelBytes,String modelFile) 位于Microsoft.ML.Vision.ImageClassificationModelParameters..ctor(IHostEnvironment环境,ModelLoadContext ctx) 在Microsoft.ML.Vision.ImageClassificationModelParameters.Create(IHostEnvironment环境,ModelLoadContext ctx)中 ---内部异常堆栈跟踪的结束--- 在System.RuntimeMethodHandle.InvokeMethod(对象目标、对象[]参数、签名符号、布尔构造函数、布尔WrapeExceptions) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性) 在System.Reflection.MethodBase.Invoke(对象obj,对象[]参数)处 在Microsoft.ML.Runtime.ComponentCatalog.LoadableClassInfo.CreateInstanceCore(对象[]参数)处 在Microsoft.ML.Runtime.ComponentCatalog.LoadableClassInfo.CreateInstance(IHostEnvironment环境,对象参数,对象[]额外) 在Microsoft.ML.Runtime.ComponentCatalog.TryCreateInstance[TRes](IHostEnvironment env,键入signatureType,TRes&result,字符串名称,字符串选项,对象[]额外) 在Microsoft.ML.Runtime.ComponentCatalog.TryCreateInstance[TRes,TSig](IHostEnvironment env,TRes&result,字符串名称,字符串选项,对象[]额外) 在Microsoft.ML.ModelLoadContext.TryLoadModelCore[TRes,TSig](IHostEnvironment env,TRes&result,Object[]额外) 在Microsoft.ML.ModelLoadContext.TryLoadModel[TRes,TSig](IHostEnvironment env,TRes&result,RepositoryReader rep,Entry ent,String dir,Object[]extra) 在Microsoft.ML.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env,TRes&result,RepositoryReader rep,Entry ent,String dir,Object[]extra) 在Microsoft.ML.ModelLoadContext.LoadModelOrNull[TRes,TSig](IHostEnvironment env,TRes&result,RepositoryReader rep,String dir,Object[]extra) 在Microsoft.ML.ModelLoadContext.LoadModelOrNull[TRes,TSig](IHostEnvironment env,TRes&result,字符串名称,对象[]额外) 在Microsoft.ML.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env,TRes&result,字符串名,对象[]额外) 在Microsoft.ML.Data.MulticlassPredictionTransformer.Create(IHostEnvironment环境,ModelLoadContext ctx)上

以下是docker文件供参考:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

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


FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Hotdogapp.Server.dll"]

我应该为ML.NET/TensorFlow使用一个特殊的映像吗?

TensorFlow是一个python包,因此您需要将它作为依赖项安装到Docker映像中。尝试将其添加到Dockerfile的最后阶段:

RUN apt-get update \
    && apt-get install -y \
        python3-pip \
    && rm -rf /var/lib/apt/lists/*
RUN ln -sf /usr/bin/python3 /usr/bin/python \
    && python -m pip install tensorflow

引发此错误是因为找不到libtensorflow.so使用的某个依赖项。要找出缺少的依赖项,可以转到运行时文件夹(/bin/${configuration}/${framework}/runtime/linux-x64/native)并尝试以下命令,该命令将告诉您缺少的依赖项

ldd libtensorflow.so

为了解决这个问题,您可以简单地安装缺少的依赖项,或者使用适用于我的较低版本的tf运行时(例如redist.tensorflow 1.*)。您还可以在中提出问题,从中可以得到更好的答案。

您引用了哪个版本的
SCIHARP.TensorFlow.Redist
吗?版本2.2.01和Microsoft.ML 1.5.0刚刚更新为2.3.0和1.5.1 for Microsoft.ML,但仍然收到相同的错误