2016-05-02 22 views
0

Imを使用しようとしています複数のサービス(redis、mongo、およびexpressのアプリケーション)を実行するためのドッカーの作成。ホストにコンテナを「接続」させたいので、ファイルを変更するとコンテナ内のファイルも変更されます。Docker - ボリューム共有ホストの問題:コンテナ

expressアプリのDockerファイルnpm installです。私はdocker-compose upをしようとすると

、Imは、次のエラーを取得:

web_1 | [nodemon] 1.9.2 
web_1 | [nodemon] to restart at any time, enter `rs` 
web_1 | [nodemon] watching: *.* 
web_1 | [nodemon] starting `node server/app.js` 
web_1 | module.js:328 
web_1 |  throw err; 
web_1 | ^
web_1 | 
web_1 | Error: Cannot find module 'express' 
web_1 |  at Function.Module._resolveFilename (module.js:326:15) 
web_1 |  at Function.Module._load (module.js:277:25) 
web_1 |  at Module.require (module.js:354:17) 
web_1 |  at require (internal/module.js:12:17) 
web_1 |  at Object.<anonymous> (/blog/server/app.js:5:15) 
web_1 |  at Module._compile (module.js:410:26) 
web_1 |  at Object.Module._extensions..js (module.js:417:10) 
web_1 |  at Module.load (module.js:344:32) 
web_1 |  at Function.Module._load (module.js:301:12) 
web_1 |  at Function.Module.runMain (module.js:442:10) 
web_1 | [nodemon] app crashed - waiting for file changes before starting... 

それは急行モジュールを見つけることができないと文句を言い。コンテナ内

docker run -it --rm --entrypoint /bin/bash image_name 

node_modulesフォルダがを存在:package.jsonに指定された依存関係は、Imは/ binに/ bashのエントリポイントとコンテナを実行し、正しくビルドプロセスがインストールされていることを確認するには

。私もnodemon server/appを実行して、アプリケーションを正しく実行することができます(もちろん、他のサービスからの接続はありません)。

ここでは、特急のアプリのために `Dockerfile'です:それはボリュームに関連したものになるだろう

version: '2' 
services: 
    db: 
    image: mongo 
    ports: 
     - "27017:27017" 

    cache: 
    image: redis 
    ports: 
     - "6379:6379" 

    web: 
    environment: 
     NODE_ENV: 'development' 
    build: . 
    command: nodemon server/app.js 
    volumes: 
     - ./:/blog 
    ports: 
     - "8000:8000" 
    depends_on: 
     - cache 
     - db 

FROM node:argon 
MAINTAINER xxxxxxxx 

# Install globally nodemon 
RUN npm install nodemon -g 

# Make folder that contains blog 
RUN mkdir -p blog 

# Set up working directory (from now on we are located inside /blog) 
WORKDIR /blog 

# Add package 
ADD ./package.json /blog 

# Install dependencies defined in packaje.json 
RUN npm install 

# Copy data 
ADD ./ /blog 

そして、ここdocker-compose.yml

私のローカル環境では、node_modulesフォルダはありません。 docker-compose.ymlで定義したvolumesタグはnode_modules folderを隠して、docker-compose builtで構築されていますか?

ADD ./ /blog 

これはあなたのローカルディレクトリを取って、ブログ/で画像を追加し、オユは、あなたのNPMのパッケージをインストールしているが、私は同じ/ブログに仮定をしているあなたのDockerfileで

答えて

2

ディレクトリ。これはあなたのイメージに/ブログのディレクトリを取っている

volumes: 
    - ./:/blog 

、それを捨てると、ローカルディレクトリに置き換える:

は、その後、あなたのドッキングウィンドウ・コンポーズファイルでは、次言います。ローカルマシンでnpm installを実行しなかったので、そこにnode_modulesディレクトリがないので、コンテナを実行すると明示的に表示されないため、エラーになります。

これを解決するには、npmパッケージを/ blogの下以外の場所、おそらく世界的に保存する必要があります。この問題については心配する必要はありません。

は(/ブログの外で)あなたは世界的にあなたのNPMモジュールをインストールします

RUN npm install -g 

RUN npm install 

からあなたdockerfileを変更するだろう、それを行うとするために、あなたは、コンテナを実行すると、それだけで動作するはずです。

関連する問題