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

我按照这个教程来dockerize一个node.js应用程序,它总是在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 

我search了多个来源,我不知道为什么NPM不能find'package.json'文件。 我也做了相同的设置,除了一个Ubuntu的14.04图像,也不工作,但它工作,如果我手动进入图像,并启动自己的nodejs服务器。

如果有更多docker或npm经验的人可以帮忙解决这个问题,那就太棒了。

谢谢!

我遇到了同样的问题,结果Docker教程有点模糊,如果你不了解COPY的行为,就很容易搞砸了目录树。

我有这个目录树:

 workdir/Dockerfile workdir/src/package.json workdir/src/index.js 

命令COPY . /src COPY . /src导致Docker镜像中的以下树:

 /src/Dockerfile /src/src/package.json /src/src/index.js 

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


另外一件事情是,当像这样debugging失败的构build时,即使容器未运行,也可以使用图像ID来查看目录树。 例如,给定以下docker build输出:

 Step 4: RUN cd /src; npm install ---> Running in 4bce6ad89dab ---> 3084f3523d93 ERROR! BAD THINGS! PANIC! 

在这种情况下,映像ID是3084f3523d93 ,因此您可以运行docker run --rm 3084f3523d93 ls -lR /src来检查/ src目录并查看出了什么问题。 或者,使用/bin/bash来代替ls -lR /src来获得一个shell并且捅过去。