You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Docker+Node-RED环境加载.NET8 ML.NET模型时路径错误的解决求助

解决Docker容器中ML.NET模型路径错误问题

问题根源

ML.NET默认会从当前工作目录加载DLFrutasELegumes.mlnet模型文件,但Node-RED容器的默认工作目录是/usr/src/node-red,而你的模型实际存放在挂载的/data/app/(或其他指定路径)下,因此出现文件找不到的错误。

解决方案

方案1:修改C#代码指定绝对路径

直接在代码里指定模型的绝对路径,避免依赖当前工作目录:

  1. 确认模型文件在容器内的实际路径(比如/data/app/DLFrutasELegumes.mlnet)
  2. 修改C#代码,显式加载模型时指定路径:
static void Main(string[] args)
{
    Console.WriteLine("App is running!!!");
    Console.WriteLine();
    // 指定模型绝对路径
    string modelPath = "/data/app/DLFrutasELegumes.mlnet";
    // 初始化MLContext并加载模型
    var mlContext = new MLContext();
    ITransformer model = mlContext.Model.Load(modelPath, out _);
    
    // 基于加载的模型创建预测引擎
    var predictionEngine = mlContext.Model.CreatePredictionEngine<DLFrutasELegumes.ModelInput, DLFrutasELegumes.ModelOutput>(model);
    
    Console.WriteLine($"Path: {args[0]}");
    var imageBytes = File.ReadAllBytes(args[0]);
    DLFrutasELegumes.ModelInput sampleData = new DLFrutasELegumes.ModelInput()
    {
        ImageSource = imageBytes,
    };

    // 使用自定义的预测引擎获取结果
    var result = predictionEngine.Predict(sampleData);
    // 处理排序和输出(匹配原PredictAllLabels逻辑)
    var sortedScoresWithLabel = result.Score
        .Select((score, index) => new { Label = DLFrutasELegumes.LabelNames[index], Score = score })
        .OrderByDescending(x => x.Score)
        .ToDictionary(x => x.Label, x => x.Score);

    Console.WriteLine($"{ "Class",-40}{ "Score",-20}");
    Console.WriteLine($"{ "-----",-40}{ "-----",-20}");

    foreach (var score in sortedScoresWithLabel)
    {
        Console.WriteLine($"{score.Key,-40}{score.Value,-20}");
    }
}

方案2:运行.NET程序时切换工作目录

在Node-RED中调用.NET程序时,先切换到模型所在目录再执行命令:

cd /data/app && dotnet ImageClassify.dll [你的图片路径参数]

这样.NET进程的当前工作目录就是模型所在的/data/app/,ML.NET就能自动找到模型文件。

方案3:修改Dockerfile设置默认工作目录

在Dockerfile中添加WORKDIR指令,将容器的默认工作目录设置为模型所在路径:

FROM nodered/node-red:4.0.9-22

USER root

RUN apk add dotnet8-runtime

RUN mkdir /data/net8.0/
RUN cd /data/net8.0/

RUN wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.4.0.tar.gz
RUN tar -C . -xzf libtensorflow-cpu-linux-x86_64-2.4.0.tar.gz

USER node-red
# 设置工作目录到模型所在的/data/app
WORKDIR /data/app

EXPOSE 1880

注意:确保/data/app目录存在,且模型文件已挂载到该路径下。


内容的提问来源于stack exchange,提问作者user30427748

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:09:51