在Docker中创建新的ASP.NET Core MVC应用程序时,NuGet包恢复速度非常慢

axr492tv  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(377)

为了解决现有ASP.NETCore2.1MVC应用程序的问题,我想使用Docker在同一台服务器上托管一个简单的helloworldASP.NETCoreMVC应用程序,所以我创建了一个小的Docker文件:

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS sdk-image
run dotnet new mvc
RUN dotnet publish -c Debug -o /publish

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 AS runtime-image
COPY --from=sdk-image /publish .
ENV ASPNETCORE_URLS=http://0.0.0.0:5000
ENV ASPNETCORE_ENVIRONMENT=Development
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

但是容器在恢复NuGet包时挂起:

Step 2/9 : RUN dotnet new mvc
 ---> Running in 54b50f10572b
Getting ready...
The template "ASP.NET Core Web App (Model-View-Controller)" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore-template-3pn-210 for details.

Processing post-creation actions...
Running 'dotnet restore' on /WebApplication1.csproj...

即使等待几分钟,这些恢复也不会完成。ASP.NET核心MVC的默认模板只包含几个包。

zyfwsgd6

zyfwsgd61#

值得注意的是,dotnet持续使用CPU资源,另一个引用多个NuGet资源的项目在10秒后恢复。因此,这不是网络问题,这表明NuGet正在执行某些操作。
我发现this question中有一个大的项目文件夹,因为它扫描整个文件夹,所以NuGet的速度似乎变慢了。这似乎也适用于我,因为我的快速测试是在容器的根文件系统中完成的。所以修复方法是简单地为项目创建一个子目录:

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS sdk-image
RUN mkdir test
WORKDIR /test
RUN dotnet new mvc

现在NuGet在几秒钟后完成了包的恢复。总是使用一个干净的子目录,即使它是一个快速和肮脏的测试容器,它(理论上)应该不重要...

kxkpmulp

kxkpmulp2#

我在Windows 2019容器主机上的Docker中遇到了这个问题。恢复需要10分钟以上,而在我自己的机器上需要大约5秒。我发现MsMgEng.exe(Defender)进程正在扫描dockerd.exe(Docker守护程序)。CPU使用率为98%。
我很确定这只是Docker守护程序,但我也在排除列表中添加了docker.exe和gitlab-runner.exe。
13分钟的恢复时间已经成为过去!这就解决了这个问题。你不需要任何特殊的参数,条件或标志来进行你的网络恢复。

相关问题