Node.js npm v6.4.1未在docker内部运行“准备”

Node.js npm v6.4.1未在docker内部运行“准备”,node.js,docker,npm,npm-install,npm-scripts,Node.js,Docker,Npm,Npm Install,Npm Scripts,我试图在docker容器内安装一个包,但未运行prepare脚本 下面是一个复制问题的Dockerfile: FROM ubuntu:18.04 # Replace shell with bash so we can source files to use npm RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN apt-get update && apt-get upgrade -y RUN apt-get instal

我试图在docker容器内安装一个包,但未运行
prepare
脚本

下面是一个复制问题的
Dockerfile

FROM ubuntu:18.04
# Replace shell with bash so we can source files to use npm
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get upgrade -y
RUN apt-get install wget git -y
RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
RUN source ~/.nvm/nvm.sh; nvm install v10.12.0; nvm use v10.12.0
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
RUN source ~/.nvm/nvm.sh; npm install jcollard/d3-ng2-service#jcollard/add-dist
在尝试直接从github安装包之前,上述程序将安装
nvm
,并切换到使用
节点v10.12.0
npm v6.4.1
,这可能会失败

$ docker build -t npm-hack:latest .
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; npm --version'
6.4.1
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; node --version'
v10.12.0
docker命令的最后一行应该失败

位于该存储库分支上的
package.json
如下所示:

您将看到
“prepare”:“BREAK-BREAK”,

当我在docker容器外部运行此操作时,将导致预期错误:

$ npm install jcollard/d3-ng2-service#jcollard/add-dist
npm ERR! prepareGitDep 1>
npm ERR! prepareGitDep > d3-ng2-service@2.3.0 prepare /home/jcollard/.npm/_cacache/tmp/git-clone-77d32f21
npm ERR! prepareGitDep > BREAK BREAK BREAK
npm ERR! prepareGitDep
npm ERR! prepareGitDep
npm ERR! prepareGitDep 2> npm WARN install Usage of the `--dev` option is deprecated. Use `--only=dev` instead.
npm ERR! prepareGitDep sh: 1: BREAK: not found
npm ERR! prepareGitDep npm ERR! file sh
npm ERR! prepareGitDep npm ERR! code ELIFECYCLE
npm ERR! prepareGitDep npm ERR! errno ENOENT
npm ERR! prepareGitDep npm ERR! syscall spawn
npm ERR! prepareGitDep npm ERR! d3-ng2-service@2.3.0 prepare: `BREAK BREAK BREAK`
npm ERR! prepareGitDep npm ERR! spawn ENOENT
npm ERR! prepareGitDep npm ERR!
npm ERR! prepareGitDep npm ERR! Failed at the d3-ng2-service@2.3.0 prepare script.
npm ERR! prepareGitDep npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
我假设有一些本地配置正在通知
npm
运行
prepare
,但我似乎找不到它。任何帮助都将不胜感激


谢谢

那是一个有趣的兔子洞。这是一个错误:。Prepare不作为root运行。您可以将容器作为非root用户运行,但我只是在问题中使用了修复程序

我把你的最后一行改成了这个

RUN source ~/.nvm/nvm.sh; npm config set unsafe-perm true; npm install jcollard/d3-ng2-service#jcollard/add-dist

现在它果然失败了。

太棒了。谢谢你的帮助。在写这篇文章之前,我花了半天时间。帮助您找到此问题的最终谷歌搜索是什么?在prepare被添加之前,我的大部分搜索都将我带到了较旧版本的
npm
,“linux npm prepare not running”我正要放弃,非常恼人的是它跳过了静默准备。只是停下来报告说,这结束了一个多天的调试会话,npm安装没有运行来自临时docker构建容器中的私有git repo的包中的准备脚本。谢谢,朋友们!