我正在开发一个 C# 项目,有以下
nuget.config
文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear/>
<add key="nuget"
value="https://www.nuget.org/api/v2/"/>
<add key="gitlab"
value="https://localdomain/api/v4/projects/5/packages/nuget/index.json"/>
</packageSources>
<packageSourceCredentials>
<gitlab>
<add key="Username"
value="MyUserName"/>
<add key="ClearTextPassword"
value="MyToken"/>
</gitlab>
</packageSourceCredentials>
</configuration>
“MyToken”如下所示:“glpat-”。
它已在我的项目中使用菜单项“设置>访问令牌”创建。
在构建过程中,显示以下错误消息:
错误 NU1301:无法加载源的服务索引
基于以下图像,使用容器中的
dotnet build
命令完成构建:“mcr.microsoft.com/dotnet/sdk:6.0”。
有人有想法吗?
提前致谢
编辑:
这似乎是本地域的问题,因为
NuGet.org
似乎可以工作,没有错误消息。
供您参考:
localdomain
在 /etc/hosts
文件中定义。
在运行器的配置文件中,定义了一个
volume
参数以链接自动签名证书。除此之外,还为 DNS 定义了一个名为 extra host
的参数,与 localdomain
相对应。
这里是 dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Service.API/Service.API.csproj", "Service.API/"]
COPY ["Service.Application/Service.Application.csproj", "Service.Application/"]
COPY ["Service.Domain/Service.Domain.csproj", "Service.Domain/"]
COPY ["Service.Database/Service.Database.csproj", "Service.Database/"]
RUN dotnet restore "Service.API/Service.API.csproj"
COPY . .
WORKDIR "/src/Service.API"
RUN dotnet build "Service.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Service.API.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Service.API.dll"]
编辑2:
我在 CI(持续集成)环境中工作,因此错误消息不在我的计算机本地。
在对容器上提到的地址执行
curl
时,我收到错误 401(未经授权),尽管我使用浏览器冲浪没有问题。执行 curl
时也会显示 401 错误消息,提及用户名和密码。对我来说,这就像 401 未经授权的问题。
我会尝试获取index.json 文件并将其放在您100% 确定可以使用CURL 访问的位置。 IE。没有身份验证的 HTTP 链接或可能是本地文件路径。然后向后工作。
从那里,您可以解决 401 错误。可能是帐户被锁定、IP 限制、密码错误(不区分大小写)等等。
我认为这可能与本地域证书或类似的东西有关。您的构建中可能不存在该证书的受信任根权威机构。例如,我们公司从 Verisign 或 Thwarte 转移到 ENTRUST...并且它到处都炸毁了各种代码,因为没有安装 entrust auth。
无论如何,祝你好运。我认为您需要从 HTTP 和无身份验证开始,然后添加 HTTPS 和无身份验证,然后添加 HTTPS 和身份验证。类似的东西。
根据 nuget.config 文件,我可以看到两个问题,并且它们都有不同的解决方案。
如果找不到“https://www.nuget.org/api/v2/”源,则正在构建的容器无法访问互联网。您需要确保它确实如此。
如果找不到“https://localdomain/api/v4/projects/5/packages/nuget/index.json”源,则容器本身可能无法找到目标,因为其主机文件没有找到知道去哪里寻找。我的猜测是,这是您在本地设置的 FQDNS,它托管一些 nuget 包,但构建过程中使用的容器无法找到它,因此会抛出错误。
可能会帮助我们提供一些有关在构建过程中在容器内构建应用程序时使用的 DockerFile 的更多信息,以便我们可以提供更清晰的解决方案,但我认为这可能是导致问题的原因。
注意:您可以通过将 .NET 项目的已发布数据复制到最终容器中来规避所有这些问题。这是另一位尝试类似操作的用户的帖子 - C# 核心的 Docker 构建需要互联网连接