Dockerfile无法查看本地文件或私有nuget服务器

rmz*_*k 1 9 c# visual-studio nuget docker

我正在尝试在容器技术上启动我的.net核心web api.使用泊坞窗.

环境= Windows 10,Visual Studio

Docker版本:

客户:

版本:17.12.0-ce

API版本:1.35

转到版本:go1.9.2

Git commit:c97c6d6

建造:2017年12月27日星期三20:05:22

OS/Arch:windows/amd64

服务器:

发动机:

版本:17.12.0-ce

API版本:1.35(最低版本1.12)

转到版本:go1.9.2

Git commit:c97c6d6

建造:2017年12月27日星期三20:12:29

OS/Arch:linux/amd64

实验:是的

我的Nuget.Config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>


<add key="nuget.org" value="https://api.nuget.org/v3/index.json" 
protocolVersion="3" />


<add key="Private" 
value="http://My_Private_Nuget_Server" />


</packageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="True" />
</packageManagement>


<apikeys>
<add key="https://www.nuget.org" value="Some_Long_Value" />
</apikeys>


<disabledPackageSources />
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MailAlertWebApiWithEF.dll"]
Run Code Online (Sandbox Code Playgroud)

我在Windows 10机器上使用Linux Container.我在Visual Studio 17上有.net核心项目.当添加docker支持并从VS 17运行时,一切正常.API在容器内站起来.但是当我关闭VS时不起作用.但是当ı尝试自定义我的dockerfile以使我的图像和容器独立于VS. 由于私有而导致错误.dll.

在我的项目中我有一个.dll 来自我的私人nuget服务器.当我尝试没有我的私人.dllı可以创建图像.但是需要那个.dll.Docker给我这个错误:

MailAlertWebApiWithEF.csproj:错误NU1101:无法找到包WebApi.Utils.源中没有包含此id的包:nuget.org

我搜索了这个错误.问题的来源似乎是Nuget.Config文件.但它对我来说似乎很好,因为我可以在那里看到我的私人nuget服务器.当ı搜索解决方案箭头总是在Linux机器上,但ı使用Windows.

1-)因此,如果我可以使用VS 17启动我的项目,那么我的nuget.config文件格式正确.它可以看到我的私人nuget服务器.对?那为什么码头工人看不到呢?

请帮忙

Mar*_*ich 11

为了dotnet在容器内运行命令来查找自定义源,nuget.config还必须将该文件复制到容器中.

要执行此操作,请将nuget.config包含私有源的文件添加到项目文件夹,然后添加COPY将此文件复制到容器的其他步骤.

示例(Dockerfile):

WORKDIR ...
COPY NuGet.Config /
COPY ... ...
Run Code Online (Sandbox Code Playgroud)

  • 对于已将 Visual Studio 配置为使用“PackageReference”格式(其中包在计算机级别缓存)的用户,“nuget.config”文件可能位于“$HOME\AppData\Roaming\NuGet”(作为 Windows 路径) ) (2认同)

Par*_*dar 10

对于那些谁落在这里,因为他们使用私有仓库定制的NuGet饲料RUN DOTNET恢复失败的,那么这里就是你可以做什么:

仅在以下情况下适用:您的NuGet.Config包含私有存储库端点和凭据,然后

1)将系统的NuGet.Config复制到.csproject所在根目录下的项目文件夹中。

2)现在在docker文件中将这些语句放在您尝试恢复包之前:

COPY ./NuGet.Config ./
Run Code Online (Sandbox Code Playgroud)

3)之后,将配置文件位置附加到dotnet restore命令中,如下所示:

RUN dotnet restore <CS_project_name>.csproj --configfile ./NuGet.Config
Run Code Online (Sandbox Code Playgroud)

4)现在,做剩下的你想做的事情。

5)在入口点之前或复制到其他容器之前(如果是多阶段构建),最好删除NuGet.Config,因为我们不希望在pod /容器中看到它

RUN rm ./NuGet.Config
Run Code Online (Sandbox Code Playgroud)


Her*_*rda 9

您可以通过 dotnet 命令添加私有 nuget,无需链接到 nuget.config 文件。

COPY *.csproj ./  

RUN dotnet nuget add source <source-value-of-nuget> -n <name> 

RUN dotnet restore 
Run Code Online (Sandbox Code Playgroud)


mdi*_*bio 7

Nuget.Config如果您的“私有 nuget feed”可通过 URL 访问,则可以将其复制到解决方案或项目文件夹。但是,如果私有源是用作 nuget 源的本地文件夹,则此方法仍然会失败,并显示该文件夹位于构建上下文之外的错误,或者仅仅是因为 Docker 构建过程未解析 Windows 路径。

例如,如果你Nuget.Config有这样的东西:

  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="My Local" value="C:\dev\nuget-packages" />
  </packageSources>

Run Code Online (Sandbox Code Playgroud)

Docker 上下文将无法解析C:\dev\nuget-packages

人们很容易放弃在 docker 中进行构建,而只是预先发布已编译的解决方案并从中构建映像......

但还可以使用另一种解决方法,需要更多步骤:在运行命令dotnet restore 之前docker-compose运行,并使用该--packages选项将恢复的包保存到解决方案文件夹,例如

dotnet-restore C:\slnfolder\myproj\myapp.csproj --packages C:\slnfolder\packages

(这可以与命令一起包装在单个 powershell 脚本中docker-compose。)

然后在 Dockerfile(用于docker-compose构建映像)中,假设上下文是解决方案文件夹并且WORKDIR'/src'

COPY packages/. packages/.

并将 Dockerfile 恢复行修改为

RUN dotnet restore "myproj/myapp.csproj" -s /src/packages -s https://api.nuget.org/v3/index.json