在运行Docker容器时,npm安装失败

我试图通过docker容器运行npm install ,使用:

 docker run -it --rm -v $(pwd):/src cthulhu666/yeoman npm install 

但总是会失败,并带有以下信息:

 85351 error node v5.5.0 85352 error npm v3.3.12 85353 error path /src/node_modules/.defaults.DELETE/node_modules/clone 85354 error code ENOENT 85355 error errno -2 85356 error syscall rename 85357 error enoent ENOENT: no such file or directory, rename '/src/node_modules/.defaults.DELETE/node_modules/clone' -> '/src/node_modules/defaults/node_modules/clone' 85357 error enoent This is most likely not a problem with npm itself 85357 error enoent and is related to npm not being able to find a file. 

我之所以这样说,是因为它并不总是这个文件……几天前,当我试图在一个不同的文件上失败的时候。

我尝试了不同的机器,使用相同的package.json,只是使用全局的npm install而不是通过docker容器,它工作正常,所以它似乎是一个问题,在安装的卷上运行它。

我真的不知道如何解决这个问题,无论是docker问题,npm问题还是其他问题。

(以防万一,这是package.json: https : //github.com/roots/sage/blob/master/package.json )

更新1

我已经尝试运行docker run -it --rm -v $(pwd):/src cthulhu666/yeoman /bin/bash ,然后在shell中运行npm install ,但同样的事情发生。

更新2

我忘了提及…我使用docker机在OSX上。 docker机VM是VMWare Fusion,因为基于VirtualBox的机器有性能问题。 不过,我刚刚尝试了启动Virtualbox机器并运行该命令并成功完成 – 因此它看起来像是VMWare Fusion特有的。

这给出了回答问题的指导。

(1)尝试使用node:5.9.1排除yeoman图像的任何问题

(2) RUN ENTRYPOINT

RUN- npm installDockerfile中使用RUN进行npm install ,在Docker构build过程中进行npm install ,并将节点模块保存在映像中。 这很好,除非你想装载node_modules文件夹。 将node_modules到主机将覆盖它。 使用volumes_from挂载到另一个容器是可以的

入口点 – 使用ENTRYPOINT进行npm install ,将npm install作为CLI docker run命令的一部分。 安装node_modules时,这很好。

(我不能工作,如果你正在装载node_modules)。

(3)简单

另外,你可能想从你的package.json删除任何看起来有问题的软件包,然后再重新引入它们,然后你就可以find确切的问题。