Docker 容器的最大调用堆栈大小超过了 npm install

Posted

技术标签:

【中文标题】Docker 容器的最大调用堆栈大小超过了 npm install【英文标题】:Maximum call stack size exceeded npm install by Docker container 【发布时间】:2019-02-21 16:57:48 【问题描述】:

我正在尝试通过 Docker 容器进行 npm 安装:

这是一个 DockerFile:

# default  /var/www/html (mapped to .../code folder with projects) 
FROM node

WORKDIR /work

# Additional tools (ng, gulp, bower)
RUN npm install -g @angular/cli bower gulp grunt

CMD while true; do sleep 10000; done

EXPOSE 3002 3003 3004

我用这个命令运行并映射它:

docker run -d --name node-cmd -p 3002:3002 -p 3003:3003 -p 3004:3004 -v 
/m/dockerlogs/node-cmd/logs:/root/.npm/_logs -v /m/projekty:/work node-cmd

我登录到这个容器:

docker exec -it node-cmd bash -c "cd /code; bash"

在我运行 npm install (https://github.com/gdi2290/angular-starter) 之后,我从登录的容器中编写了这个

但安装后出现此错误

npm ERR! Maximum call stack size exceeded

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-09-17T17_38_34_855Z-debug.log
root@08e3cd77fb83:/work/angular-starter-master#

我试图删除node_modules,但这个问题总是。

有时,在出现此错误后,当我再次尝试 npm install 时,控制台会显示以下内容:

npm ERR! path /work/angular-starter- 
master/node_modules/@schematics/update/packa
ge.json.2932816706
npm ERR! code ETXTBSY
npm ERR! errno -26
npm ERR! syscall rename
npm ERR! ETXTBSY: text file is busy, rename '/work/angular-starter- 
master/node_m
odules/@schematics/update/package.json.2932816706' -> '/work/angular- 
starter-mas
ter/node_modules/@schematics/update/package.json'

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-09-17T17_14_43_970Z-debug.log
root@08e3cd77fb83:/work/angular-starter-master#

我的 npm 版本是 6.4.1

我有一个 Windows 8.1 和 Docker 工具箱

但是当我在没有 Docker 的情况下在 Windows 上编写 npm install 时一切正常。

【问题讨论】:

你为什么一直循环播放? CMD while true; do sleep 10000; done 退出条件在哪里? @LukeHutton 这一行允许docker exec“登录”到容器(如果你删除它,docker会在运行后迅速杀死容器) aw 好的,从未使用过该模式,但我确实看到它被使用了。 你能把节点更新到最新吗? v8.9.x 再试一次,在***.com/questions/45678817/…上查看信息 @LukeHutton 现在控制台向我显示此错误:npm ERR!路径 ../typescript/bin/tsc npm 错误!代码 EPROTO npm 错误! errno -71 npm 错误!系统调用符号链接 npm ERR! EPROTO:协议错误,符号链接 '../typescript/bin/tsc' -> '/work/angul ar-starter-master/node_modules/@angular-devkit/build-optimizer/node_modules/.bin /tsc' 【参考方案1】:

这可能是因为不同的节点版本。使用node -v 检查您的节点版本并将其用于Dockerfile。在此处查看支持的标签和 Dockerfile 链接:https://hub.docker.com/_/node

Dockerfile 中,我从FROM node:alpine AS node_builder 更改为FROM node:lts-alpine AS node_builder,现在它可以工作了。

【讨论】:

太棒了!对我来说,FROM node:lts-alpineRUN npm install --no-bin-links 的组合完成了这项工作!【参考方案2】:

对我来说,这最终是由权限问题引起的(我之前在 docker 之外安装了 node_modules)。删除 node_modules 并仅从 docker 中安装更正了问题。

【讨论】:

【参考方案3】:

好的,我解决了这个问题,我使用带有 --no-bin-links 标志的 npm install。感谢您的回答:)

【讨论】:

以上是关于Docker 容器的最大调用堆栈大小超过了 npm install的主要内容,如果未能解决你的问题,请参考以下文章

npm 错误! npm install 时超出最大调用堆栈大小(角度)

猫鼬超过了Nodejs的最大调用堆栈大小

放大 cli : npm ERR!超出最大调用堆栈大小

Vue v3中的VideoJS播放列表超过最大调用堆栈大小错误

淘汰赛未捕获 RangeError:超过最大调用堆栈大小

RangeError:超过最大调用堆栈大小 React Native