【问题标题】:NPM breaks after it has been upgraded in docker containerNPM 在 docker 容器中升级后中断
【发布时间】:2017-09-08 19:17:39
【问题描述】:

我需要创建一个带有节点 v6.10.3 的 docker 容器,但要使用最新的 npm(当前为 v5.4.1)来为本地包使用新的 npm 功能。

这样的安装在我的 Mac 上运行没有任何问题,但是当我尝试使用这样的安装创建 docker 映像时,在更新 npm 后,npm 工具被破坏并抛出一堆关于缺少包的错误。

这里是 Dockerfile 的例子,我可以用它重现这个问题(注意我真正的 Dockerfile 更复杂):

FROM ubuntu:xenial

RUN apt-get update
RUN apt-get install -y curl

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs

RUN npm i -g npm
RUN npm i -g lerna

当构建过程到达RUN npm i -g lerna 行时,它会抛出一堆错误,例如:

Error: Cannot find module 'process-nextick-args'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_readable.js:26:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

任何其他 npm 脚本都会导致相同的错误。重新安装 npm 所依赖的所有包对我来说似乎不是一个解决方案。

我也尝试使用nvm 在容器内安装节点,但我遇到了同样的错误。

我的 docker 版本:

Docker version 17.06.2-ce, build cec0b72

这个 Dockerfile 有什么问题,我缺少什么?

【问题讨论】:

  • 这里突然出现了完全相同的问题。没有对我的 Dockerfile 和 package.json 进行任何更改,但我无法再部署我的项目了。而且由于它是某种 5 级依赖项(它是失败的同一个包),所以祝你好运找出谁是造成这个问题的责任并提供修复......
  • @JorisMans,现在我对下面发布的解决方法感到满意(使用 yarn 安装 npm)。也许它对您的环境也有用。

标签: node.js docker npm ubuntu-16.04


【解决方案1】:

我找到了解决此问题的方法,使用yarn

看起来很奇怪,但确实有效:

FROM ubuntu:xenial

RUN apt-get update
RUN apt-get install -y curl

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs

RUN npm i -g yarn
RUN npm uninstall npm -g
RUN yarn global add npm
RUN npm i -g lerna

不过,如果有人能解释为什么最初的解决方案不起作用,和/或帮助找到更好的解决方法,那就太好了。

【讨论】:

  • 我不知道你是怎么想出这个的,但它也解决了我这边的问题。仅供参考,我正在使用 FROM node:7 Docker 映像进行安装。
  • 你可以使用官方的node images 已经安装了yarn
猜你喜欢
  • 2017-04-21
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多