【问题标题】:ng build returns fatal out of memory exception in Dockerng build 在 Docker 中返回致命的内存不足异常
【发布时间】:2020-11-24 23:57:08
【问题描述】:

我正在尝试在 Node.js Docker 容器中构建 Web 应用程序的前端。由于我使用的是 Windows PC,因此我的基本图像非常有限。我选择了this one,因为它是 DockerHub 上唯一一个下载量不错的。由于该应用程序旨在在 Azure 中运行,因此我也仅限于 Windowsservercore 2016。当我运行以下 Dockerfile 时,我收到以下错误消息(顺便说一句,在我的主机系统上构建运行良好):

FROM stefanscherer/node-windows:10.15.3-windowsservercore-2016
WORKDIR /app

RUN npm install -g @angular/cli@6.2.4

COPY . ./

RUN ng build

#
# Fatal error in , line 0
# API fatal error handler returned after process out of memory on the background thread
#
#
#
#FailureMessage Object: 000000E37E3FA6D0

我尝试使用 --max_old_space 将构建过程的可用内存增加到 16GB(我笔记本电脑的整个 RAM),但这并没有帮助。我还联系了基础映像的作者,以了解这是否是问题所在,但由于这似乎无法通过较小的示例应用程序重现,因此也不是很有成效。我现在正在研究这个问题一个星期,我真的不知道可能是什么原因。所以我希望能从这里得到新的冲动。至少我可以调查的方向。

我还尝试在 Windowsservercore 基础映像上安装 Node.js 和 Angular。如果有人知道如何做到这一点,它可能是解决方案。

编辑:我注意到错误消息是我从构建过程中得到的only输出,它甚至没有尝试构建模块。也许这意味着什么……

【问题讨论】:

  • 如果你想要一些最小的东西,为什么不alpine-node?可以看到,它被广泛使用,alpine 是轻量级容器的最佳选择。
  • Alpine 不是 Linux 发行版或仅在 Linux 上可用吗?当谈到 Linux 时,我是个大菜鸟,如果我忽略了某些东西,我很抱歉。
  • 显示 angular.json 文件中的预算 json 数组
  • 这就是 Docker 的目的,无论你在什么操作系统上都能够运行容器。您完全可以在 Windows 上运行 Linux 容器!我认为您的声明“我的基本映像非常有限”是关于 Docker for Windows 的支持,但是一旦安装,所有容器都可供您使用!
  • @trichetriche 来自Docker Classroom 的引用:但是,Linux 容器需要 Docker 主机运行 Linux 内核。例如,Linux 容器不能直接在 Windows Docker 主机上运行。 Windows 容器也是如此——它们需要在具有 Windows 内核的 D​​ocker 主机上运行。

标签: node.js angular windows docker


【解决方案1】:

好吧,我想通了。虽然 Docker 官方文档声明 Docker 可以无限制地访问资源,但是当你的构建过程超过一定的内存量时,你似乎需要使用 -m 选项。

编辑: 这个问题似乎得到了一些意见,所以也许我应该澄清一下这个答案。问题的根源似乎是在 Windows 下,Docker 在 Hyper-V 虚拟机中运行。因此,当文档谈到“无限访问资源”时,它并不是指您 PC 的资源,而是指该 VM 的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2012-12-15
    • 2016-02-13
    • 2011-05-26
    • 2013-06-22
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多