我正在尝试通过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特有的。
答案 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
使用ENTRYPOINT
将npm install
作为CLI docker run
命令的一部分。挂载node_modules
时这很好。
(如果您正在安装node_modules,我无法解决)。
(3)简化
此外,您可能希望从package.json
中删除任何似乎有问题的软件包,并一次重新引入一个软件包,然后您就可以查明确切的问题。
答案 1 :(得分:0)
随着Docker Native for Mac的发布,以上不再是问题。