【发布时间】: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