如果项目依赖于共享网络驱动器中的 nuget 私有包,如何使用 docker-compose 创建容器?

How to create a container with docker-compose if the project depends on a nuget private package in a share network drive?

我有一个 asp.net 核心 webapi 解决方案,它使用来自位于共享网络驱动器中的私有存储库的 NuGet 包。

我所做的是在项目目录中添加一个 nuget.linux.config 文件,其中包含以下行:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <packageSources>
    <add key="myrepo" value="/nuget/myrepo/" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

我尝试复制nuget/myrepo文件夹下的nugetpackage私服内容。 docker文件看起来像:

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src

COPY projectfolder/NuGet.linux.config .
COPY projectfolder/project.csproj projectfolder/
VOLUME /nuget/myrepo/

COPY \networkpath\to\the\nuget_packages_folder /nuget/myrepo/
RUN dotnet restore projectfolder/project.csproj
COPY . .
WORKDIR /src/projectfolder
RUN dotnet build project.csproj -c Release -o /app --no-restore

FROM build AS publish
RUN dotnet publish project.csproj -c Release -o /app --no-restore

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

但这行不通.. 如何在 vs2017 中使用 docker-compose 项目创建引用共享网络中 nuget 包的项目的容器映像?

如果项目是在调试模式下构建的,则不需要添加nuget.config文件,也不需要修改docker文件为

COPY \networkpath\to\the\nuget_packages_folder /nuget/myrepo/

问题只出现在发布模式。

解决方案是将 NuGet 包复制到项目的一个文件夹中,并在 Dockerfile 中添加以下内容:

VOLUME /nuget/myrepo/
COPY projectfolder/NugetPackage/ /nuget/myrepo/

并且 nuget.config 文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <packageSources>
    <add key="myrepo" value="/nuget/myrepo/" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

这远不是一个好的解决方案,但我认为目前没有其他选择。