ฉันมีแอพที่มีบริการดังต่อไปนี้:
web/
- เก็บและรันเว็บเซิร์ฟเวอร์ขวดหลาม 3 บนพอร์ต 5000 ใช้ sqlite3worker/
- มีindex.js
ไฟล์ซึ่งเป็นผู้ปฏิบัติงานสำหรับคิว ปฏิสัมพันธ์เว็บเซิร์ฟเวอร์ที่มีคิวนี้ใช้ API JSON9730
ผ่านพอร์ต ผู้ปฏิบัติงานใช้ 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/
block จาก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.
- คุณตรวจสอบเรื่องนี้อย่างไร