【问题标题】:Maximum call stack size exceeded npm install by Docker containerDocker 容器的最大调用堆栈大小超过了 npm install
【发布时间】: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 再试一次,在stackoverflow.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'

标签: docker npm


【解决方案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。感谢您的回答:)

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 2016-02-03
      • 2019-07-17
      • 1970-01-01
      • 2019-07-19
      • 2016-04-22
      • 2020-01-05
      相关资源
      最近更新 更多