Docker - dotnet还原无法连接到私有源

eh57zj3b  于 2023-01-29  发布在  Docker
关注(0)|答案(1)|浏览(99)

从我的Dockerfile调用dotnet restore <project>导致NU1301: Unable to load the service index for source错误。我已经经历了许多建议的类似问题,仍然有问题。以下是我所能提供的关于我所尝试的事情的尽可能多的信息:

  • Docker引擎的DNS设置为"www.example.com"8.8.8.8"
  • 使用Linux容器
  • RUN ping google.com成功(因此我可以访问Internet)
  • 工作完美的罚款击中nuget.org饲料
  • nuget.config文件中当前有凭据,只是为了让它工作
  • 一旦我让它工作,它将被删除以用于不同的方法
  • 这些凭据(用户名/PAT)与我在主机上进行开发时使用的凭据相同
  • RUN curl <nuget_feed_url>成功
  • 使用--verbosity detailed运行restore命令不会提供任何其他错误消息

下面是所讨论的Dockerfile的部分

FROM mcr.microsoft.com/dotnet/aspnet:6.0.13 AS base
# Create dockeruser in base layer
RUN addgroup --system --gid 1000 dockergroup \
    && adduser --system --uid 1000 --ingroup dockergroup --shell /bin/sh dockeruser

WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
# Arguments are required in each stage in order to get the correct value

WORKDIR /src
COPY ["src/Nucleus.LumberYard.API/", "Nucleus.LumberYard.API/"]
COPY ["./nuget.config", "./nuget.config"]

WORKDIR "/src/Nucleus.LumberYard.API"
#COPY [".editorconfig", "./"]
RUN dotnet restore "Nucleus.LumberYard.API.csproj"
RUN dotnet build "Nucleus.LumberYard.API.csproj" -c Release --no-restore

环境信息

  • Docker桌面v3.3.1
  • Docker版本20.10.5
zkure5ic

zkure5ic1#

据我所知,您有以下情况:

  • 一个. NET 6应用程序,其中包含对nuget包的一些引用
  • 一些nuget软件包取自通常的nuget公共存储库,另一些则取自私有nuget提要
  • 您正在通过Docker映像分发您的应用程序,并且在Docker构建过程中,您希望运行针对您的csproj文件之一的dotnet restore命令
  • dotnet restore命令失败,因为dotnet cli无法与您的专用nuget feed对话

我在我正在做的项目中遇到了同样的情况。我们在Azure Devops中托管了一个私有的Nuget提要,我们也在解决这个问题时遇到了一些麻烦。
首先,让我们澄清问题的根本原因。你做了正确的事情,证明你能够通过你提到的curl命令从你的构建机器访问nuget提要。实际上失败的是你的构建机器和私有nuget提要之间的身份验证。
你需要的第一件事是一个个人访问令牌对你的nuget feed有读权限。你可以按照这个指南来创建你需要的个人访问令牌。
一旦你有了令牌,你需要把它提供给dotnet cli。有几种方法可以做到这一点,我将解释一个适合我们的方法。
我们没有将nuget源代码添加到nuget.config文件中,而是通过cli命令注册它。我确信有一种方法可以通过nuget.config文件做完全相同的事情(更多细节请参见此处)。
这是我们在docker文件中使用的cli命令:

RUN dotnet nuget add source https://foo.bar.com/something/nuget/v3/index.json -u "whatever" -p "my-personal-access-token" --store-password-in-clear-text --valid-authentication-types "basic"

请注意:

  • https://foo.bar.com/something/nuget/v3/index.json是指向您的私有nuget提要索引的绝对URL
  • 用户名可以是你喜欢的任何东西。你确实需要提供一个值,但是我没有注意到任何区别,即使是像whatever这样的随机字符串
  • 虚拟值my-personal-access-token必须替换为第一步创建的个人访问令牌

Here您可以找到dotnet nuget add source命令的完整参考。
dotnet cli中注册此源后,您将能够运行dotnet restore命令,而不会出现错误。
希望这有帮助!

相关问题