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

标签 c# docker asp.net-core docker-compose dockerfile

为了对现有 ASP.NET Core 2.1 MVC 应用程序进行故障排除,我想使用 Docker 在同一服务器上托管一个简单的 hello world ASP.NET Core MVC 应用程序。所以我创建了一个小 Dockerfile:

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 Core MVC 的默认模板只包含几个包。

最佳答案

值得注意的是,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 会在几秒钟后完成包恢复。吸取的教训是:始终使用干净的子目录,即使它是一个快速且肮脏的测试容器(理论上)不重要...

关于c# - 在 Docker 中创建新的 ASP.NET Core MVC 应用程序时,NuGet 包恢复速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749824/

相关文章:

c# - 如何以编程方式查找用于签署给定证书的证书?

docker - 如何在GitLab CI作业中运行没有外壳的容器

docker - 想要具有Docker卷的持久性数据,但具有空目录

linux - cronjob 未在 Docker 容器中运行抛出 Dockerfile

c# - 当我们使用 ASP.NET API Core 2.1 时如何在 MongoDB 中使用多集合进行操作

c# - 无法在 ASP.NET Core 操作筛选器中获取正确的 DbContext 引用

c# - 您是否需要使用 RemoteWebDriver 运行 Selenium 服务器才能在 TFS 2017 vnext 构建中执行步骤 "Run Functional Tests"?

c# - unity 根据其他物体角度旋转物体

C# WinForms : On New Form Load Choose Tab Visibility

c# - ASP.NET Core (HttpSys) 路由在本地工作,但在部署时不工作