2015-01-08 10 views
5

このチュートリアルでは、node.jsアプリケーションをドッキングするためにDockerfileの 'npm install'部分で常に失敗します。私は複数のソースを検索したCentOSでDockerを実行しているNPMインストールエラー

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!  <[email protected]> 

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 

と私はNPMは "を見つけることができない理由はわからない:私は取得していますhttp://docs.docker.com/examples/nodejs_web_app/

エラーを以下に示します。ここでは、チュートリアルへのリンクですpackage.json 'ファイル。私はまた、ubuntu 14.04イメージ以外は同じ設定を行いましたが、どちらも動作しませんが、手動で画像に入り、nodejsサーバーを自分で起動すると動作します。

ドッカーやnpmの経験が豊富な人なら誰でもこの問題を解決することができたら面白いでしょう。

ありがとうございます!

+0

/src/package.jsonは存在しますか?名前などに余分な文字はありませんか? – vogonistic

+0

その上のdockerはそのコマンドを実行しているイメージのイメージIDを 'docker run {image_id}/bin/bash'に' ls'で表示し、package.jsonが存在するかどうかを確認します。 – generalhenry

+0

@vogonisticはい/src/package.jsonファイルが存在し、それが正しく入力されていますが、なぜnpmがファイルを見つけることができないのでしょうか? – Jamaal

答えて

3

私はこの同じ問題を抱えていましたが、COPYの動作を理解していないと、Dockerチュートリアルが少し曖昧であり、ディレクトリツリーを壊しやすくなっています。

私はこのディレクトリツリーを持っていた:

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

ドッカーの画像で、次のツリーでCOPY . /src結果コマンド:

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

だから基本的には、同じフォルダ内にpackage.jsonindex.jsを入れて、あなたのDockerfileと正常に動作するはずです。


もうひとつ、このような障害が発生したビルドをデバッグするとき、あなたはコンテナが実行されていない場合でも、ディレクトリツリーでのぞき見を持っている画像IDを使用することができます。たとえば、次のようdocker build出力を与える:

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

あなたは/ srcディレクトリを検査し、何が悪かったのか確認するためにdocker run --rm 3084f3523d93 ls -lR /srcを実行できるように、この場合の画像IDは、3084f3523d93あります。あるいは、ls -lR /srcの代わりに/bin/bashを使用して、シェルを取得して突っ込むことができます。

関連する問題