Saya memiliki aplikasi dengan layanan berikut:
web/
- memegang dan menjalankan server web python 3 flask pada port 5000. Menggunakan sqlite3.worker/
- Memilikiindex.js
file yang merupakan pekerja untuk antrian. server web berinteraksi dengan antrian ini menggunakan json API over port9730
. Pekerja menggunakan redis untuk penyimpanan. Pekerja juga menyimpan data secara lokal di folderworker/images/
Sekarang pertanyaan ini hanya menyangkut 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
Ketika saya menjalankan docker-compose build
, semuanya berfungsi seperti yang diharapkan dan semua modul npm diinstal /worker/node_modules
seperti yang saya harapkan.
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>
Tetapi ketika saya melakukannya docker-compose up
, saya melihat kesalahan ini:
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)
Ternyata tidak ada modul yang ada di /worker/node_modules
(di host atau di wadah).
Jika di tuan rumah, saya npm install
, maka semuanya bekerja dengan baik. Tetapi saya tidak ingin melakukan itu. Saya ingin wadah untuk menangani dependensi.
Apa yang salah di sini?
(Tak perlu dikatakan, semua paket sudah masuk package.json
.)
volumes: - worker/:/worker/
blokir dari docker-compose.yml
file. Baris ini menimpa folder yang Anda buat dengan perintah 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.
- Bagaimana Anda memeriksa ini?