gpt4 book ai didi

c# - Dockerfile 看不到本地文件或私有(private) nuget 服务器

转载 作者:IT老高 更新时间:2023-10-28 21:19:35 25 4
gpt4 key购买 nike

我正在尝试在容器技术上启动我的 .net 核心 Web api。使用 docker。

环境=Windows 10、Visual Studio

Docker 版本:

Client:

Version: 17.12.0-ce

API version: 1.35

Go version: go1.9.2

Git commit: c97c6d6

Built: Wed Dec 27 20:05:22 2017

OS/Arch: windows/amd64

Server:

Engine:

Version: 17.12.0-ce

API version: 1.35 (minimum version 1.12)

Go version: go1.9.2

Git commit: c97c6d6

Built: Wed Dec 27 20:12:29 2017

OS/Arch: linux/amd64

Experimental: true

我的 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>

我的 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"]

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

在我的项目中,我有一个来 self 的私有(private) nuget 服务器的 .dll。当我尝试没有我的私有(private) .dll 时,我可以创建图像。但是我需要那个.dll。 Docker 给我这个错误:

MailAlertWebApiWithEF.csproj : error NU1101: Unable to find package WebApi.Utils. No packages exist with this id in source(s): nuget.org

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

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

请帮忙

最佳答案

对于那些使用私有(private)存储库自定义 nuget 提要运行 dotnet restore失败,那么你可以这样做:

尤其适用于:您的 NuGet.Config 包含私有(private) repo 端点和凭据,然后

  1. 将系统的 NuGet.Config 复制到 .csproject 所在的同一根级别的项目文件夹中。

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

    COPY ./NuGet.Config ./

  3. 之后,在 dotnet restore 命令中追加配置文件位置,如下所示:

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

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

  5. 就在入口点之前的末尾或复制到其他容器之前(在多阶段构建的情况下),最好删除 NuGet.Config,因为我们不想要可以在 pod/container 中查看

RUN rm ./NuGet.Config

[更新]https://github.com/NuGet/Home/issues/4413#issuecomment-483920015 中所述

如果我们使用下面的复制命令把它放到文件系统的根目录下

COPY ./NuGet.Config /nuget.config

那么我们不需要在dotnet restore期间指定配置文件的位置

关于c# - Dockerfile 看不到本地文件或私有(private) nuget 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821991/

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