2017-02-04 4 views
1

で実行しているノードのjsアプリ用のモジュールを見つけることができませんドッカーで作成する。私はこのDockerfileを使用しました :は、私は私の非常に初心者の質問には申し訳ありませんが、私はこのエラーを考え出す運の無い日が午前、私はExpressのアプリを持っていると私はそれを実行しようとしていドッキングウィンドウのコン環境

FROM mhart/alpine-node 
RUN mkdir -p /usr/src/app 
RUN chmod -R 777 /usr/src/app 
WORKDIR /usr/src/app 
RUN npm install node-gyp -g 
RUN npm install nodemon -g 
ENV NODE_ENV development 
EXPOSE 3000 

そして、私のドッキングウィンドウ・コンファイルのこの部分:

backend: 
    mem_limit: 100m 
    build: 
     context: . 
     dockerfile: dockerfiles/node/Dockerfile 
    command: npm start 
    depends_on: 
     - mongo 
     - elasticsearch 
    volumes: 
     - ./backend/:/usr/src/app 
    ports: 
     - 3000:3000 
    links: 
     - "mongo:mongo" 
     - "elasticsearch:elasticsearch" 

私がアップドッキングウィンドウを構成するか、私はこのエラーを取得する:

backend_1  | npm info it worked if it ends with ok 
backend_1  | npm info using [email protected] 
backend_1  | npm info using [email protected] 
backend_1  | npm info lifecycle [email protected]~prestart: [email protected] 
backend_1  | npm info lifecycle [email protected]~start: [email protected] 
backend_1  | 
backend_1  | > [email protected] start /usr/src/app 
backend_1  | > nodemon index.js 
backend_1  | 
backend_1  | [nodemon] 1.11.0 
backend_1  | [nodemon] to restart at any time, enter `rs` 
backend_1  | [nodemon] watching: *.* 
backend_1  | [nodemon] starting `node index.js` 
backend_1  | module.js:471 
backend_1  |  throw err; 
backend_1  | ^
backend_1  | 
backend_1  | Error: Cannot find module 'dotenv' 
backend_1  |  at Function.Module._resolveFilename (module.js:469:15) 
backend_1  |  at Function.Module._load (module.js:417:25) 
backend_1  |  at Module.require (module.js:497:17) 
backend_1  |  at require (internal/module.js:20:19) 
backend_1  |  at Object.<anonymous> (/usr/src/app/index.js:1:63) 
backend_1  |  at Module._compile (module.js:570:32) 
backend_1  |  at Object.Module._extensions..js (module.js:579:10) 
backend_1  |  at Module.load (module.js:487:32) 
backend_1  |  at tryModuleLoad (module.js:446:12) 
backend_1  |  at Function.Module._load (module.js:438:3) 
backend_1  | [nodemon] app crashed - waiting for file changes before starting... 

バックエンドのコンテナでls -alを実行すると、私のbの完全なリストアプリケーションのフォルダの内容を確認してください。ただし、node_modulesの依存関係は認識されません。

答えて

3

あなたのDockerfileから欠落している容器内に依存関係をインストールする必要があります。

一般的な方法は、既にアプリケーションを認識しているDockerfileを作成し、package.jsonファイルをコピーしてnpm installを実行することです。

これは、後でアプリケーションを実行すると、あなたのコンテナがすべてのコードの依存関係を見つけることができます。

参照してくださいここでは例: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

サンプルDockerfile:あなたはもちろん、COPYコマンドのパスを適応させる必要があるかもしれません

FROM node:boron 

# 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" ] 

+2

私は同じガイドに従ってきましたが、私はまだ – jemlifathi

+0

あなたDockerfileはすべて 'package.json'ものが欠落している、またはあなたが完全なものを貼り付けていなかった同じ問題を持ちます。あなたの質問に「npm install」は全くありません。そのため、node_modulesには何もありません。コンテナ内のパスをダブルチェックします。つまり、ノードコードはnode_modulesと同じフォルダにあります。あなたのコードはDocker-composeに 'volume'でマウントされますが、依存関係は' Dockerfile'からそこにあります。 – CharlieBrown

+0

実際、私のWORKDIRにはすべてのプロジェクトファイルが含まれていますが、アプリケーションを起動すると、node_modulesフォルダから依存関係を取得できません。 – jemlifathi

関連する問題