为什么我的npm dockerfile循环?

我正在容纳一个nodejs应用程序。 我的Dockerfile看起来像这样:

FROM node:4-onbuild ADD ./ /egp RUN cd /egp \ && apt-get update \ && apt-get install -y r-base python-dev python-matplotlib python-pil python-pip \ && ./init.R \ && pip install wordcloud \ && echo "ABOUT TO do NPM" \ && npm install -g bower gulp \ && echo "JUST FINISHED ALL INSTALLATION" EXPOSE 5000 # CMD npm start > app.log CMD ["npm", "start", ">", "app.log"] 

当我不使用Dockerfile,而是运行

 docker run -it -p 5000:5000 -v $(pwd):/egp node:4-onbuild /bin/bash 

然后,我可以粘贴RUN命令的值,并完成所有的工作,然后执行npm start命令,我很好。 但是,尝试代替docker build . 它似乎运行到一个无休止的循环尝试安装npm的东西(并从不显示我的回声命令),直到它崩溃与内存不足的错误。 我哪里错了?

编辑

下面是展示相同容器的EGP文件夹的最小版本:login并粘贴整个“RUN”命令,但是docker build不会。它是一个.tar.gz文件(尽pipe名称可能没有下载)。

http://orys.us/egpbroken

节点:4-onbuild映像包含以下Dockerfile

 FROM node:4.4.7 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app ONBUILD COPY package.json /usr/src/app/ ONBUILD RUN npm install ONBUILD COPY . /usr/src/app CMD [ "npm", "start" ] 

这三个ONBUILD命令在您的ADD或RUN命令启动之前运行,并且无限循环似乎来自正在运行的npm install命令。 当您直接启动容器时,由于您没有构build子图像,所以ONBUILD命令会被跳过。 将您的FROM行更改为:

 FROM node:4 

你应该有你的预期的结果。