使用Dockerfile(Visual Studio)设置.xml文件的相对路径



我有一个Visual Studio解决方案,其中包含许多API项目,然后这些API项目中包含C#库依赖项。我已成功地将我的解决方案"固定化"。

出现的一个问题是,我的一个C#库中有启动时读取的xml文件。当我独立运行这些库时,路径是C#生成的构建,即:

Debug: C:developmentgemsBackend1DataAPIbinDebugnetcoreapp3.1
Release: C:developmentgemsBackend1DataAPIbinReleasenetcoreapp3.1

XML文件被添加到上面的调试和发布路径中,并且在Visual Studio中的非Dockerized环境中可以很好地读取它们。

但有了Docker镜像,现在的路径是"应用程序"。这些文件不在"应用程序"的基本级别。他们在:

app/bin/Debug/netcoreapp3.1和app/bin/Release/netcoreapp3.1。

我不想将这些文件重新复制到"应用程序"的外部级别,而是有一个相对路径集,我可以在Dockerfile中引用和设置。这可能吗?

你会提出什么解决方案?

谢谢!

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["DataAPI/DataAPI.csproj", "DataAPI/"]
COPY ["IdentityServer/IdentityServer.csproj", "IdentityServer/"]
COPY ["ServiceDiscovery/ServiceDiscovery.csproj", "ServiceDiscovery/"]
COPY ["Data/Data.csproj", "Data/"]
COPY ["Utilities/Utilities.csproj", "Utilities/"]
COPY ["UnitConversion/UnitConversion.csproj", "UnitConversion/"]
# Trying (but failing) to copy from my /src/UnitConversion/OverrideDataNames.xml to /app
COPY ["UnitConversion/OverrideDataNames.xml", "/app"]
RUN dotnet restore "DataAPI/DataAPI.csproj"
COPY . .
WORKDIR "/src/DataAPI"
RUN dotnet build "DataAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DataAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DataAPI.dll"]

复制覆盖数据名称语法看起来不错。本地文件不能存在。

Docker中做了很多事情,为什么所有的csproj文件都在复制?无论如何。看起来你可以用一个不那么杂乱的dockerfile更好地了解发生了什么。

考虑试试这个

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN dotnet publish ./DataApi -c Release -o /app/build

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
WORKDIR /app
COPY --from=build /app/build /app
COPY ./UnitConversion/OverrideDataNames.xml /app
EXPOSE 80
ENTRYPOINT ["dotnet", "DataAPI.dll"]

只需一个构建步骤,COPY . /app就可以将所有上下文复制到/app dotnet中,然后发布它。dotnet发布将自行运行还原。

然后,像你在文件中已经做的那样,使用一个更精简的运行时映像来放置你的应用程序。在这一步中,尝试将你需要的任何xml文件复制到base/app中。要在图像中移动文件,您宁愿执行RUN cp dest src

希望以上任何一个都能帮助你,一旦你有了一个简单的设置,你就可以扩展它。

最新更新