Docker上的Angular:接近堆限制的无效标记压缩分配失败-JavaScript堆内存不足

我有一个使用Angular的.Net Core 3.0应用程序,并且正在尝试构建docker映像。

该项目在本地完美执行,但是当我尝试构建映像时,出现以下错误:

YourConfigurationClass

这是StackTrace

EXEC : FATAL error : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory [/app/ProjectName.csproj]

这是Dockerfile:

==== JS stack trace =========================================

      0: ExitFrame [pc: 0x13725d9]
      1: StubFrame [pc: 0x13da3dc]
  Security context: 0x02e7023c08a1 <JSObject>
      2: /* anonymous */(aka /* anonymous */) [0x30e7252b31e9] [/app/ClientApp/node_modules/terser/dist/bundle.min.js:1] [bytecode=0x23cc07acc7d1 offset=0](this=0x3bde677004a9 <undefined>,0x30e7252b3229 <JSFunction (sfi = 0x23cc07acc479)>)
      3: E(aka E) [0x1f4ce3e9071] [/app/ClientApp/node_modules/terser/dist/bundle.min.js:1] [byt...

   1: 0x9d8da0 node::Abort() [ng build --prod --prod]
   2: 0x9d9f56 node::OnFatalError(char const*,char const*) [ng build --prod --prod]
   3: 0xb37dbe v8::Utils::ReportOOMFailure(v8::internal::Isolate*,char const*,bool) [ng build --prod --prod]
   4: 0xb38139 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*,bool) [ng build --prod --prod]
   5: 0xce34f5  [ng build --prod --prod]
   6: 0xce3b86 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [ng build --prod --prod]
   7: 0xcefa1a v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector,v8::GCCallbackflags) [ng build --prod --prod]
   8: 0xcf0925 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace,v8::internal::GarbageCollectionReason,v8::GCCallbackflags) [ng build --prod --prod]
   9: 0xcf3338 v8::internal::Heap::AllocateRawWithRetryOrFail(int,v8::internal::AllocationType,v8::internal::AllocationAlignment) [ng build --prod --prod]
  10: 0xcba158 v8::internal::Factory::NewFixedArray(int,v8::internal::AllocationType) [ng build --prod --prod]
  11: 0xe0130d v8::internal::DeoptimizationData::New(v8::internal::Isolate*,int,v8::internal::AllocationType) [ng build --prod --prod]
  12: 0x197ebd4 v8::internal::compiler::CodeGenerator::GenerateDeoptimizationData() [ng build --prod --prod]
  13: 0x197f2d5 v8::internal::compiler::CodeGenerator::FinalizeCode() [ng build --prod --prod]
  14: 0x19f8c8d v8::internal::compiler::PipelineImpl::FinalizeCode(bool) [ng build --prod --prod]
  15: 0x19f9e40 v8::internal::compiler::PipelineCompilationJob::FinalizeJobImpl(v8::internal::Isolate*) [ng build --prod --prod]
  16: 0xc0ef80 v8::internal::OptimizedCompilationJob::FinalizeJob(v8::internal::Isolate*) [ng build --prod --prod]
  17: 0xc12823 v8::internal::Compiler::FinalizeOptimizedCompilationJob(v8::internal::OptimizedCompilationJob*,v8::internal::Isolate*) [ng build --prod --prod]
  18: 0xc37f46 v8::internal::OptimizingCompileDispatcher::InstallOptimizedFunctions() [ng build --prod --prod]
  19: 0xca0e7c v8::internal::StackGuard::HandleInterrupts() [ng build --prod --prod]
  20: 0xfef887 v8::internal::Runtime_StackGuard(int,unsigned long*,v8::internal::Isolate*) [ng build --prod --prod]
  21: 0x13725d9  [ng build --prod --prod]
  Aborted
  npm ERR! code ELIFECYCLE
  npm ERR! errno 134
  npm ERR! metronic-angular@6.1.4 build: `ng build --prod "--prod"`
  npm ERR! Exit status 134
  npm ERR! 
  npm ERR! Failed at the metronic-angular@6.1.4 build script.
  npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

  npm ERR! A complete log of this run can be found in:
  npm ERR!     /root/.npm/_logs/2019-11-15T21_42_53_010Z-debug.log
/app/ProjectName.csproj(39,5): error MSB3073: The command "npm run build -- --prod" exited with code 134.
The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1

我已经尝试将节点最大旧空间增加到64mb,但没有成功。如果我在创建运行FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore EXPOSE 80 # Setup NodeJs RUN apt-get update && \ apt-get install -y wget && \ apt-get install -y gnupg2 && \ wget -qO- https://deb.nodesource.com/setup_12.x | bash - && \ apt-get install -y build-essential nodejs # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet","ProjectName.dll"] 的项目时保留初始模板,也可以完美地构建docker映像,但是从我购买的主题复制文件(Metronic)后,错误就会出现。

我还能尝试解决什么问题?

safeact2 回答:Docker上的Angular:接近堆限制的无效标记压缩分配失败-JavaScript堆内存不足

通过运行命令来安装nodejs,您将杀死docker的全部目的。

Docker应该消除开发人员正在安装的库,软件包和软件的依赖,因为他们认为这是完成工作所必需的。

Docker有一套基础映像,这些映像已通过商定的安装附带来运行该系统。

当您同时运行dotnet core和nodejs等双重要求时,这变得很棘手。 我希望您重新考虑在同一系统上要两个不同应用程序的方式和原因的设计。它们可以放在不同的容器中吗?如果是的话,一定要这样做。

只要有可用于该服务的基本映像,我也将避免通过命令进行安装。

在这种情况下,我会用这种方式解决。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
 
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ./WebApplication.csproj ./
RUN dotnet restore WebApplication.csproj
COPY . .
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 node:alpine AS nodewebapp
WORKDIR /app
RUN npm install
COPY . .
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=nodewebapp /app .
ENTRYPOINT ["dotnet","WebApplication.dll"]
本文链接:https://www.f2er.com/3092044.html

大家都在问