通过docker容器运行时,npm安装失败

时间:2016-03-29 17:16:19

标签: 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容器,它工作正常,所以在挂载的卷上运行它似乎是一个问题。

我不确定如何解决这个问题 - 无论是码头问题,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-machine在OSX上。 Docker-machine VM是VMWare Fusion,因为基于VirtualBox的机器存在性能问题。但是,我刚试过启动Virtualbox机器并运行命令并成功完成 - 所以它看起来像是VMWare Fusion特有的。

2 个答案:

答案 0 :(得分:0)

这为回答问题提供了指导。

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

(2)RUN v ENTRYPOINT

npm install中使用RUN的RUN - Dockerfile在Docker构建过程中执行npm install并将节点模块保存在图像中。除非您要挂载node_modules文件夹,否则这很棒。将node_modules挂载到主机将覆盖它。使用volumes_from将其安装到另一个容器是可以的

ENTRYPOINT - npm install使用ENTRYPOINTnpm install作为CLI docker run命令的一部分。挂载node_modules时这很好。

(如果您正在安装node_modules,我无法解决)。

(3)简化

此外,您可能希望从package.json中删除任何似乎有问题的软件包,并一次重新引入一个软件包,然后您就可以查明确切的问题。

答案 1 :(得分:0)

随着Docker Native for Mac的发布,以上不再是问题。