为啥我的 dockerfile 中的 dotnet restore 步骤失败?
Posted
技术标签:
【中文标题】为啥我的 dockerfile 中的 dotnet restore 步骤失败?【英文标题】:Why does my dotnet restore step fail in my dockerfile?为什么我的 dockerfile 中的 dotnet restore 步骤失败? 【发布时间】:2021-10-21 08:07:21 【问题描述】:我在 Visual Studio 2019 v16.11.1 中生成了一个基本的 Kubernetes Web 应用程序,它允许我自动生成一个 Dockerfile 并开始调试。但是,在切换到发布配置后,内部dotnet restore
命令执行时构建会失败。显然,在尝试从提要中提取 Nuget 包时,dotnet restore 会拒绝 Nuget 提要服务器提供的 SSL 证书。
我的问题是,我做错了什么?我从字面上是由 Visual Studio 生成的默认 Web 应用程序开始,当我尝试构建发布配置时它会自动失败。详情请看这里:
问题
以下 Dockerfile 可以在调试配置中构建,但不能在发布配置中构建。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["KubernetesWebApp/KubernetesWebApp.csproj", "KubernetesWebApp/"]
RUN dotnet restore "KubernetesWebApp/KubernetesWebApp.csproj"
COPY . .
WORKDIR "/src/KubernetesWebApp"
RUN dotnet build "KubernetesWebApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "KubernetesWebApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "KubernetesWebApp.dll"]
单击“调试”启动调试会话会执行以下构建,我可以调试应用程序:
docker build -f ".\KubernetesWebApp\Dockerfile" --force-rm -t kuberneteswebapp:dev --target base --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=KubernetesWebApp" .
然而,在尝试以下构建命令时,dotnet restore 命令由于远程 SSL 证书检查失败而失败:
docker build -t kuberneteswebapp:latest -f KubernetesWebApp/Dockerfile .
这会引发以下错误:
[+] Building 7.7s (12/17)
=> [internal] load build definition from Dockerfile 0.4s
=> => transferring dockerfile: 32B 0.2s
=> [internal] load .dockerignore 0.3s
=> => transferring context: 35B 0.0s
=> [internal] load metadata for mcr.microsoft.com/dotnet/core/aspnet:3.1 0.8s
=> [internal] load metadata for mcr.microsoft.com/dotnet/core/sdk:3.1 0.8s
=> [internal] load build context 0.3s
=> => transferring context: 644B 0.1s
=> [build 1/7] FROM mcr.microsoft.com/dotnet/core/sdk:3.1@sha256:aa984bf37de864afe9f34bc80e42412dd95702b94731a481821eeae364df77ae 0.2s
=> => resolve mcr.microsoft.com/dotnet/core/sdk:3.1@sha256:aa984bf37de864afe9f34bc80e42412dd95702b94731a481821eeae364df77ae 0.2s
=> [base 1/2] FROM mcr.microsoft.com/dotnet/core/aspnet:3.1@sha256:9280563285e34929fdae56b8759d8050169b3ce125a5dced64945b3b51e79918 0.3s
=> => resolve mcr.microsoft.com/dotnet/core/aspnet:3.1@sha256:9280563285e34929fdae56b8759d8050169b3ce125a5dced64945b3b51e79918 0.3s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> CACHED [build 2/7] WORKDIR /src 0.0s
=> CACHED [build 3/7] COPY [KubernetesWebApp/KubernetesWebApp.csproj, KubernetesWebApp/] 0.0s
=> ERROR [build 4/7] RUN dotnet restore "KubernetesWebApp/KubernetesWebApp.csproj" 5.5s
------
> [build 4/7] RUN dotnet restore "KubernetesWebApp/KubernetesWebApp.csproj":
#12 3.363 Determining projects to restore...
#12 5.397 /usr/share/dotnet/sdk/3.1.412/NuGet.targets(128,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/src/KubernetesWebApp/KubernetesWebApp.csproj]
#12 5.397 /usr/share/dotnet/sdk/3.1.412/NuGet.targets(128,5): error : The SSL connection could not be established, see inner exception. [/src/KubernetesWebApp/KubernetesWebApp.csproj]
#12 5.397 /usr/share/dotnet/sdk/3.1.412/NuGet.targets(128,5): error : The remote certificate is invalid according to the validation procedure. [/src/KubernetesWebApp/KubernetesWebApp.csproj]
------
executor failed running [/bin/sh -c dotnet restore "KubernetesWebApp/KubernetesWebApp.csproj"]: exit code: 1
我认为问题是什么
我认为问题出现在:
-
docker 容器尝试从 nuget 提要中提取 Nuget 包,
在身份验证期间,它会检查提供的服务器证书
由于某些指定的验证程序,服务器证书验证失败。
我尝试解决的问题
我尝试了以下命令来强制应用程序下载新的基础容器映像,但无济于事:
尝试 1:
docker build --no-cache --pull -t kuberneteswebapp:latest -f KubernetesWebApp/Dockerfile .
结果:与之前相同的错误
尝试 2:
docker system prune
docker image prune -a
docker build --no-cache --pull -t kuberneteswebapp:latest -f KubernetesWebApp/Dockerfile .
结果:和之前一样的错误
这些努力都没有成功。谁能帮我?我在这里不知所措。
【问题讨论】:
您是否在使用某种代理(通常在工作中)? 我们使用 *** 来重定向我们所有的互联网流量。 由于从 Visual Studio 构建工作,您是否尝试在您的计算机上从 cmd 构建项目。 Visual Studio 可能会更改一些环境设置以处理 https 连接(TLS 1.2 问题,或忽略证书错误)。 我做了,命令行构建失败。 您是否尝试在另一台机器上构建该项目?没有提到 *** 会更好 【参考方案1】:问题自行解决。我刚刚重新尝试了我的测试和实际项目,它现在可以工作了。这可能是软件更新或计算机重新启动。但现在一切正常。
【讨论】:
【参考方案2】:如果您使用的是 Windows 容器,我建议您切换到 Linux 容器并再次尝试。 (您可以通过右键单击系统托盘栏中的 Docker 桌面图标来执行此操作)。
我在 GitHub 上遇到了以下问题:https://github.com/docker/for-win/issues/2760#issuecomment-430889666 我无法使用新的 ASP .NET Web API 重现您的问题
【讨论】:
以上是关于为啥我的 dockerfile 中的 dotnet restore 步骤失败?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用本地 nuget 包源进行 Dockerfile dotnet restore [重复]
为啥我的模型对象在 dotnet core 2.x Razor 页面应用程序中的 Razor 页面上始终为空?
在centos7.5使用DockerFile构建镜像时报错“Error parsing reference: "microsoft/dotnet:2.2-aspnetcore-runtime