gpt4 book ai didi

docker - 仅在docker中无法使用将文件用作源的类型提供程序

转载 作者:行者123 更新时间:2023-12-02 19:21:03 25 4
gpt4 key购买 nike

我的想法不多了,所以我想寻求帮助-也许有人已经开始使用F#,TypeProviders和Docker。
问题是我不能仅将类型提供程序(json或csv)与文件一起用作docker中的源(如果我以老式的方式运行它,那么它将按预期工作)。

代码非常短;

Program.fs

open FSharp.Data;

type Config = JsonProvider<"config.json">

[<EntryPoint>]
let main argv =
let config = Config.GetSample()
printfn "%s" config.Whataver
0

config.json
{
"Whataver": "Value to print"
}

Dokerfile (Visual Studio自动生成的一个)
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ConsoleFsharp/ConsoleFsharp.fsproj", "ConsoleFsharp/"]
RUN dotnet restore "ConsoleFsharp/ConsoleFsharp.fsproj"
COPY . .
WORKDIR "/src/ConsoleFsharp"
RUN dotnet build "ConsoleFsharp.fsproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConsoleFsharp.fsproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleFsharp.dll"]

旧时尚方式结果:

enter image description here

在docker(linux)中运行:

enter image description here

我已经尝试通过TypePovider嵌入式资源设置将文件用作嵌入式资源,但这不会更改行为。我什至可以将它们嵌入,并且在没有docker的情况下运行时仍然可以使用,甚至可以作为独立的应用程序单个文件发布时使用。。。(当然,没有docker),但是docker拒绝配合任何配置。谢谢大家的任何帮助!

P.S是的,我确定cinfig.json文件在docker容器中。

最佳答案

问题是您使用了Config.GetSample(),它使用了在提供程序构造函数中指定的文件的路径(在尖括号中)。改为使用:

open FSharp.Data

type Config = JsonProvider<"config.json">

[<EntryPoint>]
let main argv =
// ensure you have set the "Copy" property of config.json to "Copy Always"
// specify here relative path to config.json, for example:
let path = "./config.json"
let config = Config.Load(path)
printfn "%s" config.Whatever
// prints "Value to print"
0

再次,确保已将config.json的“ 复制”属性设置为“ 总是复制”。

关于docker - 仅在docker中无法使用将文件用作源的类型提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59715427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com