2016-12-09 5 views
0

は私が構築し、開発ENV NodeJSとドッカー

しかしドッカーイメージを実行したときに

ROM node:argon 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app/ 
RUN npm install 

# Bundle app source 
COPY . /usr/src/app 

EXPOSE 8080 
CMD [ "npm", "start" ] 

すべてが、私は私が得た

docker run -p 8080:8080 -v ~/projects/NodeJSExample/:/usr/src/app/ nodeexample 

実行すると、正常に動作します以下Dockerfileを作成しました:

Error: Cannot find module 'express' 
    at Function.Module._resolveFilename (module.js:325:15) 
    at Function.Module._load (module.js:276:25) 
    at Module.require (module.js:353:17) 
    at require (internal/module.js:12:17) 
    at Object.<anonymous> (/usr/src/app/server.js:3:17) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 

コード変更を動的にサポートするためにDockerfileを設定する方法を教えてください。

+0

ディレクトリをマウントする前に 'npm install'をローカルに実行していましたか? – Matt

答えて

1

問題は、コンテナの/usr/src/app/フォルダにボリュームを宣言することです。それはあなたのコンテナのフォルダをあなたのファイルシステム上のものに置き換えます。これは確かにnpm installコマンドが実行されていません。

Dockerfileが有効であるかのように、そのように配布できます。しかし、ローカル開発目的では、npm installをイメージ(Dockerfile)自体で実行することはできません。だから、npm installコマンドをローカル~/projects/NodeJSExample/で実行する必要があるのは、コンテナが稼動している間に実行してもいいからです。

+1

'docker run --rm -it -v〜/ projects/NodeJSExample /:/ usr/src/app/nodeexample npm install'を実行すると、ボリュームへのデープを取得する可能性があります。 – balintant

+0

同意しましたが、 "--rm"オプションを追加すると、そのあとコンテナが削除されます。これは役に立たなくなります。 –

+0

Yupがコマンドを編集しました。また、必要な対話がある場合は '-it'を追加しました。 – balintant

関連する問題