在CentOS上运行Docker的NPM安装错误

Jam*_*aal 7 node.js docker

我正在按照本教程对dock.js应用程序进行dockerize,它总是在Dockerfile的'npm install'部分失败.以下是教程的链接:http://docs.docker.com/examples/nodejs_web_app/

我得到的错误如下所示:

npm ERR! install Couldn't read dependencies
npm ERR! Error: ENOENT, open '/src/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-43-generic
npm ERR! command "node" "/usr/bin/npm" "install"
npm ERR! cwd /src
npm ERR! node -v v0.10.33
npm ERR! npm -v 1.3.6
npm ERR! path /src/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /src/npm-debug.log
npm ERR! not ok code 0
Run Code Online (Sandbox Code Playgroud)

我搜索了多个来源,我不知道为什么npm找不到'package.json'文件.我也做了相同的设置,除了使用ubuntu 14.04图像,这也不起作用,但如果我手动进入图像并自己启动nodejs服务器,它就可以工作.

如果任何对docker或npm有更多经验的人可以帮助解决这个问题,那就太好了.

谢谢!

Jus*_*ᚄᚒᚔ 4

我遇到了同样的问题,事实证明 Docker 教程有点含糊,如果您不了解 COPY 的行为,很容易搞砸目录树。

我有这个目录树:

workdir/Dockerfile
workdir/src/package.json
workdir/src/index.js
Run Code Online (Sandbox Code Playgroud)

该命令COPY . /src会在 Docker 映像中生成以下树:

/src/Dockerfile
/src/src/package.json
/src/src/index.js
Run Code Online (Sandbox Code Playgroud)

所以基本上,将package.json和放在index.js与 Dockerfile 相同的文件夹中,它应该可以正常工作。


另一件事是,在调试此类失败的构建时,即使容器未运行,您也可以使用映像 ID 来查看目录树。例如,给出以下docker build输出:

Step 4: RUN cd /src; npm install
 ---> Running in 4bce6ad89dab
 ---> 3084f3523d93
ERROR! BAD THINGS! PANIC!
Run Code Online (Sandbox Code Playgroud)

本例中的映像 ID 为3084f3523d93,因此您可以运行docker run --rm 3084f3523d93 ls -lR /src检查 /src 目录并查看出了什么问题。或者,使用/bin/bash代替 来ls -lR /src获取外壳并四处查看。