次のサービスを備えたアプリがあります。
web/
-ポート5000でPython 3フラスコWebサーバーを保持して実行します。sqlite3を使用します。worker/
-index.js
キューのワーカーであるファイルがあります。Webサーバーは、ポート経由でjson APIを使用してこのキューと対話します9730
。ワーカーはストレージにredisを使用します。ワーカーはまた、データをフォルダーにローカルに保存しますworker/images/
現在、この質問はにのみ関係していworker
ます。
worker/Dockerfile
FROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
docker-compose.yml
redis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
を実行するとdocker-compose build
、すべてが期待どおりに動作し、すべてのnpmモジュールが/worker/node_modules
期待どおりにインストールされます。
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
しかし、私がそうするときdocker-compose up
、私はこのエラーを見ます:
worker_1 | Error: Cannot find module 'async'
worker_1 | at Function.Module._resolveFilename (module.js:336:15)
worker_1 | at Function.Module._load (module.js:278:25)
worker_1 | at Module.require (module.js:365:17)
worker_1 | at require (module.js:384:17)
worker_1 | at Object.<anonymous> (/worker/index.js:1:75)
worker_1 | at Module._compile (module.js:460:26)
worker_1 | at Object.Module._extensions..js (module.js:478:10)
worker_1 | at Module.load (module.js:355:32)
worker_1 | at Function.Module._load (module.js:310:12)
worker_1 | at Function.Module.runMain (module.js:501:10)
/worker/node_modules
(ホスト上またはコンテナー内に)モジュールが存在しないことがわかります。
ホストの場合、私は npm install
は、すべてがうまくます。しかし、私はそれをしたくありません。コンテナに依存関係を処理させたい。
ここで何が問題になっていますか?
(言うまでもなく、すべてのパッケージはにありpackage.json
ます。)
volumes: - worker/:/worker/
からブロックを削除してみてくださいdocker-compose.yml
。この行は、COPYコマンドで作成したフォルダを上書きします。
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.
-どうやってこれをチェックしたの?