首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dockerfile看不到本地文件或私有nuget服务器

Dockerfile看不到本地文件或私有nuget服务器
EN

Stack Overflow用户
提问于 2018-02-16 15:29:39
回答 6查看 22.3K关注 0票数 23

我正在尝试在容器技术上启动我的.net核心web应用程序接口。使用docker。

Environments=Windows 10,Visual Studio

Docker版本:

客户端:

版本: 17.12.0-ce

API版本: 1.35

Go版本: go1.9.2

Git提交: c97c6d6

构建时间: Wed Dec 27 20:05:22 2017

操作系统/架构: windows/amd64

服务器:

引擎:

版本: 17.12.0-ce

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

Go版本: go1.9.2

Git提交: c97c6d6

构建时间: Wed Dec 27 20:12:29 2017

操作系统/架构: linux/amd64

实验:正确

我的Nuget.Config文件:

代码语言:javascript
复制
<?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>

我的Dockerfile:

代码语言:javascript
复制
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"]

我在Windows10机器上使用Linux容器。我在Visual Studio17上有.net核心项目。当ı添加docker支持并在VS17上运行时,一切都很好。当我关闭VS时,container.But内部的API就不起作用了。然而,当ı试图定制我的dockerfile以使我的图像和容器独立于VS时。它会因为一个私有的.dll而产生错误。

在我的项目ı中,有一个来自我的私有nuget服务器的.nget。当ı在没有我的私有.dll的情况下尝试时,ı可以创建镜像。但是ı需要那个.dll。Docker给我这个错误:

MailAlertWebApiWithEF.csproj :错误NU1101:找不到程序包WebApi.Utils。源中不存在具有此id的包: nuget.org

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

1-)所以如果我可以从VS17开始我的项目,那么我的nuget.config文件的格式是正确的。它可以看到我的私人nuget服务器。对吗?那为什么不让docker看不到呢?

请帮帮忙

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-02-18 18:11:18

为了使在容器中运行的dotnet命令能够找到您的自定义提要,还必须将nuget.config文件复制到容器中。

为此,将一个包含私有提要的nuget.config文件添加到您的项目文件夹,并添加一个额外的COPY步骤,将该文件复制到容器中。

示例(Dockerfile):

代码语言:javascript
复制
WORKDIR ...
COPY NuGet.Config /
COPY ... ...
票数 26
EN

Stack Overflow用户

发布于 2019-01-03 14:27:05

对于那些使用私有存储库自定义nuget提要运行dotnet restore is failing的用户,您可以这样做:

特别适用于:您的NuGet.Config包含私有存储库端点和凭据,则

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

  1. 现在位于docker文件中,在您尝试恢复软件包之前放入以下语句:

COPY ./NuGet.Config ./

RUN dotnet restore <CS_project_name>.csproj --configfile ./NuGet.Config

  1. 现在可以做你想做的其他事情了。

在入口点之前或复制到其他容器之前(在多阶段构建的情况下),删除

  1. 是个好主意,因为我们不希望它在pod/container中可用

RUN rm ./NuGet.Config

https://github.com/NuGet/Home/issues/4413#issuecomment-483920015上提到的更新

如果我们使用下面的copy命令将它放在文件系统的根目录中

代码语言:javascript
复制
COPY ./NuGet.Config /nuget.config

这样我们就不需要在dotnet restore过程中指定配置文件的位置

票数 26
EN

Stack Overflow用户

发布于 2020-08-21 18:34:04

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

代码语言:javascript
复制
COPY *.csproj ./  

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

RUN dotnet restore 
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48821991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档