从我的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
1条答案
按热度按时间zkure5ic1#
据我所知,您有以下情况:
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命令:
请注意:
https://foo.bar.com/something/nuget/v3/index.json
是指向您的私有nuget提要索引的绝对URLwhatever
这样的随机字符串my-personal-access-token
必须替换为第一步创建的个人访问令牌Here您可以找到
dotnet nuget add source
命令的完整参考。在
dotnet
cli中注册此源后,您将能够运行dotnet restore
命令,而不会出现错误。希望这有帮助!