在 docker 中构建 dotnet 核心应用程序 - 永远运行

Muq*_*uqq 3 .net c# docker asp.net-core

我正在尝试构建一个简单的dotnet core应用程序并将其包装在 Docker 映像中。在镜像构建过程中,所有dotnet命令(如dotnet restoredotnet build)永远运行,没有任何进展,但占用 CPU 大约 50%。我让它运行了至少一个小时,但它从未停止过。一个正常的dotnet restore只需要几毫秒,所以肯定有问题。

\n

重现步骤。

\n
    \n
  1. 安装 dotnet sdk。\n
      \n
    • dotnet --version
    • \n
    • 给予:3.1.200
    • \n
    \n
  2. \n
  3. mkdir TestApplication
  4. \n
  5. cd TestApplication
  6. \n
  7. dotnet new console
  8. \n
  9. dotnet run/restore/build一切正常
  10. \n
  11. 接下来,我们创建一个 Dockerfile:
  12. \n
\n
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build\n\nWORKDIR /\n\nCOPY *.csproj ./\nRUN dotnet restore\n\nCOPY . .\n\nRUN dotnet build\nRUN dotnet publish -c Release -o out\n\nFROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime\nCOPY --from=build /aspnetapp/out ./\nENTRYPOINT ["dotnet", "aspnetapp.dll"]\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. docker build -t myTestApplication .
  2. \n
\n

结果:dotnet即使在玩游戏时,在第一个命令处总是挂起。在 macOS Catalina (10.15.6) 上运行。

\n

有人知道这里出了什么问题吗?我尝试为 Python 应用程序创建一个图像,该图像运行良好,因此它似乎与dotnet.

\n

编辑 1: \n添加详细日志输出:

\n
(base) \xe2\x9e\x9c  TestApplication docker build -t testerico .\nSending build context to Docker daemon   5.12kB\nStep 1/9 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build\n ---> 9ab567a29502\nStep 2/9 : WORKDIR /\n ---> Using cache\n ---> ec8404eb93c3\nStep 3/9 : COPY *.csproj ./\n ---> Using cache\n ---> 86a4e6875b03\nStep 4/9 : RUN dotnet restore --verbosity diagnostic\n ---> Running in 1791f6205c36\n/usr/share/dotnet/sdk/3.1.401/MSBuild.dll -nologo -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,/usr/share/dotnet/sdk/3.1.401/dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,/usr/share/dotnet/sdk/3.1.401/dotnet.dll -maxcpucount -target:Restore -verbosity:m -verbosity:diagnostic ./TestApplication.csproj\nBuild started 08/29/2020 11:49:23.\nEnvironment at start of build:\nNUGET_XMLDOC_MODE = skip\nDOTNET_USE_POLLING_FILE_WATCHER = true\nPATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nDOTNET_RUNNING_IN_CONTAINER = true\nHOME = /root\nDOTNET_HOST_PATH = /usr/share/dotnet/dotnet\nPOWERSHELL_DISTRIBUTION_CHANNEL = PSDocker-DotnetCoreSDK-Debian-10\nMSBuildExtensionsPath = /usr/share/dotnet/sdk/3.1.401/\nMSBuildSDKsPath = /usr/share/dotnet/sdk/3.1.401/Sdks\nHOSTNAME = 1791f6205c36\nPWD = /\nDOTNET_CLI_TELEMETRY_SESSIONID = af7fc2b0-1308-4572-99e7-30bae6e369e8\nMSBuildLoadMicrosoftTargetsReadOnly = true\n\n11:49:23.778     0>Process = "/usr/share/dotnet/dotnet"\n                   MSBuild executable path = "/usr/share/dotnet/sdk/3.1.401/MSBuild.dll"\n                   Command line arguments = "/usr/share/dotnet/sdk/3.1.401/MSBuild.dll -maxcpucount -verbosity:m -nologo -target:Restore -verbosity:diagnostic -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,/usr/share/dotnet/sdk/3.1.401/dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,/usr/share/dotnet/sdk/3.1.401/dotnet.dll"\n                   Current directory = "/"\n                   MSBuild version = "16.7.0-preview-20360-03+188921e2f"\n                   Resolving SDK \'Microsoft.NET.Sdk\'...\n                   Property reassignment: $(MSBuildProjectExtensionsPath)="/obj/" (previous value: "obj\\") at /usr/share/dotnet/sdk/3.1.401/Current/Microsoft.Common.props (56,5)\n                   Property reassignment: $(TargetsForTfmSpecificContentInPackage)=";PackTool;_PackProjectToolValidation" (previous value: ";PackTool") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.PackProjectTool.props (15,5)\n                   Property reassignment: $(OutputType)="Exe" (previous value: "Library") at /TestApplication.csproj (4,5)\n                   Property reassignment: $(PublishProfileImported)="false" (previous value: "true") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.ImportPublishProfile.targets (28,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**" (previous value: ";bin/Debug//**") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets (171,5)\n                   Property reassignment: $(IntermediateOutputPath)="obj\\Debug\\netcoreapp3.1\\" (previous value: "obj\\Debug\\") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets (185,5)\n                   Property reassignment: $(OutputPath)="bin/Debug/netcoreapp3.1/" (previous value: "bin/Debug/") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets (186,5)\n                   Property reassignment: $(_FrameworkVersionForImplicitDefine)="3_1" (previous value: "3.1") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.BeforeCommon.targets (165,5)\n                   Property reassignment: $(_DebugSymbolsProduced)="true" (previous value: "false") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (149,5)\n                   Property reassignment: $(_DocumentationFileProduced)="false" (previous value: "true") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (158,5)\n                   Property reassignment: $(ProcessorArchitecture)="msil" (previous value: "") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (487,5)\n                   Property reassignment: $(DelaySign)="" (previous value: "false") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (527,5)\n                   Property reassignment: $(_SGenGenerateSerializationAssembliesConfig)="Auto" (previous value: "") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (3491,5)\n                   Property reassignment: $(_SGenGenerateSerializationAssembliesConfig)="Off" (previous value: "Auto") at /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets (3492,5)\n                   Property reassignment: $(MSBuildAllProjects)=";/usr/share/dotnet/sdk/3.1.401/NuGet.targets;/usr/share/dotnet/sdk/3.1.401/Current/Microsoft.Common.targets/ImportAfter/Microsoft.TestPlatform.ImportAfter.targets" (previous value: ";/usr/share/dotnet/sdk/3.1.401/NuGet.targets") at /usr/share/dotnet/sdk/3.1.401/Current/Microsoft.Common.targets/ImportAfter/Microsoft.TestPlatform.ImportAfter.targets (16,5)\n                   Property reassignment: $(ProjectAssetsFile)="/obj/project.assets.json" (previous value: "/obj//project.assets.json") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets (24,5)\n                   Property reassignment: $(ProjectAssetsCacheFile)="/obj/Debug/netcoreapp3.1/TestApplication.assets.cache" (previous value: "obj\\Debug\\netcoreapp3.1\\TestApplication.assets.cache") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets (29,5)\n                   Property reassignment: $(ResolveAssemblyReferencesDependsOn)="\n                         \n                         ResolveProjectReferences;\n                         FindInvalidProjectReferences;\n                         GetFrameworkPaths;\n                         GetReferenceAssemblyPaths;\n                         PrepareForBuild;\n                         ResolveSDKReferences;\n                         ExpandSDKReferences;\n                       ;\n                         ResolvePackageDependenciesForBuild;\n                         _HandlePackageFileConflicts;\n                       " (previous value: "\n                         ResolveProjectReferences;\n                         FindInvalidProjectReferences;\n                         GetFrameworkPaths;\n                         GetReferenceAssemblyPaths;\n                         PrepareForBuild;\n                         ResolveSDKReferences;\n                         ExpandSDKReferences;\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets (71,5)\n                   Property reassignment: $(PrepareResourcesDependsOn)="\n                         ResolvePackageDependenciesForBuild;\n                         _HandlePackageFileConflicts;\n                         \n                         ;\n                         PrepareResourceNames;\n                         ResGen;\n                         CompileLicxFiles\n                       \n                       " (previous value: "\n                         ;\n                         PrepareResourceNames;\n                         ResGen;\n                         CompileLicxFiles\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets (77,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**" (previous value: ";bin/Debug//**;obj\\Debug\\/**") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (27,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**" (previous value: ";bin/Debug//**;obj\\Debug\\/**;bin//**") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (29,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user" (previous value: ";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (32,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user;**/*.*proj" (previous value: ";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (33,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user;**/*.*proj;**/*.sln" (previous value: ";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user;**/*.*proj") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (34,5)\n                   Property reassignment: $(DefaultItemExcludes)=";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user;**/*.*proj;**/*.sln;**/*.vssscc" (previous value: ";bin/Debug//**;obj\\Debug\\/**;bin//**;obj\\/**;**/*.user;**/*.*proj;**/*.sln") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets (35,5)\n                   Property reassignment: $(ResolveAssemblyReferencesDependsOn)="\n                         \n                         \n                         ResolveProjectReferences;\n                         FindInvalidProjectReferences;\n                         GetFrameworkPaths;\n                         GetReferenceAssemblyPaths;\n                         PrepareForBuild;\n                         ResolveSDKReferences;\n                         ExpandSDKReferences;\n                       ;\n                         ResolvePackageDependenciesForBuild;\n                         _HandlePackageFileConflicts;\n                       ;\n                         ResolveTargetingPackAssets;\n                       " (previous value: "\n                         \n                         ResolveProjectReferences;\n                         FindInvalidProjectReferences;\n                         GetFrameworkPaths;\n                         GetReferenceAssemblyPaths;\n                         PrepareForBuild;\n                         ResolveSDKReferences;\n                         ExpandSDKReferences;\n                       ;\n                         ResolvePackageDependenciesForBuild;\n                         _HandlePackageFileConflicts;\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets (14,5)\n                   Property reassignment: $(_GenerateRuntimeConfigurationPropertyInputsCache)="/obj/Debug/netcoreapp3.1/TestApplication.genruntimeconfig.cache" (previous value: "obj\\Debug\\netcoreapp3.1\\TestApplication.genruntimeconfig.cache") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (53,5)\n                   Property reassignment: $(_DefaultUserProfileRuntimeStorePath)="/root/.dotnet/store" (previous value: "/root") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (97,5)\n                   Property reassignment: $(CoreBuildDependsOn)="\n                         _CheckForBuildWithNoBuild;\n                         \n                         BuildOnlySettings;\n                         PrepareForBuild;\n                         PreBuildEvent;\n                         ResolveReferences;\n                         PrepareResources;\n                         ResolveKeySource;\n                         Compile;\n                         ExportWindowsMDFile;\n                         UnmanagedUnregistration;\n                         GenerateSerializationAssemblies;\n                         CreateSatelliteAssemblies;\n                         GenerateManifests;\n                         GetTargetPath;\n                         PrepareForRun;\n                         UnmanagedRegistration;\n                         IncrementalClean;\n                         PostBuildEvent\n                       ;\n                         GenerateBuildDependencyFile;\n                         GenerateBuildRuntimeConfigurationFiles\n                       " (previous value: "\n                         BuildOnlySettings;\n                         PrepareForBuild;\n                         PreBuildEvent;\n                         ResolveReferences;\n                         PrepareResources;\n                         ResolveKeySource;\n                         Compile;\n                         ExportWindowsMDFile;\n                         UnmanagedUnregistration;\n                         GenerateSerializationAssemblies;\n                         CreateSatelliteAssemblies;\n                         GenerateManifests;\n                         GetTargetPath;\n                         PrepareForRun;\n                         UnmanagedRegistration;\n                         IncrementalClean;\n                         PostBuildEvent\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (118,5)\n                   Property reassignment: $(CoreCleanDependsOn)="\n                         _SdkBeforeClean;\n                         \n                       " (previous value: "") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (127,5)\n                   Property reassignment: $(RebuildDependsOn)="\n                         _SdkBeforeRebuild;\n                         \n                         BeforeRebuild;\n                         Clean;\n                         Build;\n                         AfterRebuild;\n                       \n                       " (previous value: "\n                         BeforeRebuild;\n                         Clean;\n                         Build;\n                         AfterRebuild;\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (134,5)\n                   Property reassignment: $(CompileDependsOn)="\n                         \n                         ResolveReferences;\n                         ResolveKeySource;\n                         SetWin32ManifestProperties;\n                         FindReferenceAssembliesForReferences;\n                         _GenerateCompileInputs;\n                         BeforeCompile;\n                         _TimeStampBeforeCompile;\n                         _GenerateCompileDependencyCache;\n                         CoreCompile;\n                         _TimeStampAfterCompile;\n                         AfterCompile;\n                       ;\n                         _CreateAppHost;\n                         _CreateComHost;\n                         _GetIjwHostPaths;\n                       " (previous value: "\n                         ResolveReferences;\n                         ResolveKeySource;\n                         SetWin32ManifestProperties;\n                         FindReferenceAssembliesForReferences;\n                         _GenerateCompileInputs;\n                         BeforeCompile;\n                         _TimeStampBeforeCompile;\n                         _GenerateCompileDependencyCache;\n                         CoreCompile;\n                         _TimeStampAfterCompile;\n                         AfterCompile;\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (396,5)\n                   Property reassignment: $(CreateSatelliteAssembliesDependsOn)="\n                         \n                         _GenerateSatelliteAssemblyInputs;\n                         ComputeIntermediateSatelliteAssemblies;\n                         GenerateSatelliteAssemblies\n                       ;\n                         CoreGenerateSatelliteAssemblies\n                       " (previous value: "\n                         _GenerateSatelliteAssemblyInputs;\n                         ComputeIntermediateSatelliteAssemblies;\n                         GenerateSatelliteAssemblies\n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets (758,5)\n                   Property reassignment: $(DesignerRuntimeImplementationProjectOutputGroupDependsOn)="\n                         \n                         ;\n                         \n                         ;\n                         BuildOnlySettings;\n                         PrepareForBuild;\n                         AssignTargetPaths;\n                         ResolveReferences\n                       \n                       ;\n                         _GenerateDesignerDepsFile;\n                         _GenerateDesignerRuntimeConfigFile;\n                         _GatherDesignerShadowCopyFiles;\n                       " (previous value: "\n                         ;\n                         \n                         ;\n                         BuildOnlySettings;\n                         PrepareForBuild;\n                         AssignTargetPaths;\n                         ResolveReferences\n                       \n                       ") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.DesignerSupport.targets (21,5)\n                   Property reassignment: $(_ShimInputCacheFile)="/obj/Debug/netcoreapp3.1/TestApplication.shiminput.cache" (previous value: "obj\\Debug\\netcoreapp3.1\\TestApplication.shiminput.cache") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.PackTool.targets (94,5)\n                   Property reassignment: $(_ShimCreatedSentinelFile)="/obj/Debug/netcoreapp3.1/TestApplication.shimcreated.sentinel" (previous value: "obj\\Debug\\netcoreapp3.1\\TestApplication.shimcreated.sentinel") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.PackTool.targets (96,5)\n                   Property reassignment: $(DefineConstants)="TRACE;DEBUG" (previous value: "TRACE") at /usr/share/dotnet/sdk/3.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.CSharp.targets (31,5)\n                   Property reassignment: $(Def

Roa*_* S. 5

我认为这个问题缺少WORKDIR /app指令,我添加了它,现在它正在工作。太奇怪了...

https://github.com/dotnet/core/issues/1825

因此,更改WORKDIR /WORKDIR /app应该可以解决问题。

来自 Core 3.1 文档的 Docker 文件:https://docs.docker.com/engine/examples/dotnetcore/

VS 生成的典型 Docker 文件如下所示,并使用 Core Debian 映像(我在部署到 OpenShift/Kubernetes 时也在使用它)。在下面的示例中,我的应用程序名为“WebApplication”。

    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
    WORKDIR /src
    COPY ["WebApplication.csproj", ""]
    RUN dotnet restore "./WebApplication.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "WebApplication.csproj" -c Release -o /app/build

    FROM build AS publish
    RUN dotnet publish "WebApplication.csproj" -c Release -o /app/publish

    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "WebApplication.dll"]
Run Code Online (Sandbox Code Playgroud)

  • 是的,哈哈,这实际上是问题所在。但首先,为什么这是一个问题,其次,为什么它可以在 docker 之外工作?确实很奇怪...感谢您的帮助! (2认同)