[英]Node cannot find node_modules in dockerized node app
我是碼頭工人的新手。 我試圖將現有節點應用程序停靠。 在docker-compose期間,應用程序拋出錯誤,指出它無法找到node_modules。
這是錯誤
dockerised-yelpcamp | > dockerised-yelpcamp@1.0.1 start /usr/src/app
dockerised-yelpcamp | > node app.js
dockerised-yelpcamp |
dockerised-yelpcamp | internal/modules/cjs/loader.js:584
dockerised-yelpcamp | throw err;
dockerised-yelpcamp | ^
dockerised-yelpcamp |
dockerised-yelpcamp | Error: Cannot find module 'express'
dockerised-yelpcamp | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
dockerised-yelpcamp | at Function.Module._load (internal/modules/cjs/loader.js:508:25)
dockerised-yelpcamp | at Module.require (internal/modules/cjs/loader.js:637:17)
dockerised-yelpcamp | at require (internal/modules/cjs/helpers.js:22:18)
dockerised-yelpcamp | at Object.<anonymous> (/usr/src/app/app.js:1:77)
.
.
.
dockerised-yelpcamp | at Function.Module._load (internal/modules/cjs/loader.js:531:3)
dockerised-yelpcamp | npm ERR! code ELIFECYCLE
dockerised-yelpcamp | npm ERR! errno 1
dockerised-yelpcamp | npm ERR! dockerised-yelpcamp@1.0.1 start: `node app.js`
dockerised-yelpcamp | npm ERR! Exit status 1
dockerised-yelpcamp | npm ERR!
dockerised-yelpcamp | npm ERR! Failed at the dockerised-yelpcamp@1.0.1 start script.
dockerised-yelpcamp | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
dockerised-yelpcamp | npm WARN Local package.json exists, but node_modules missing, did you mean to install?
dockerised-yelpcamp |
dockerised-yelpcamp | npm ERR! A complete log of this run can be found in:
dockerised-yelpcamp | npm ERR! /root/.npm/_logs/2019-04-17T11_14_17_109Z-debug.log
dockerised-yelpcamp exited with code 1
泊塢窗,compose.yml
version: "3"
services:
main_app:
container_name: dockerised-yelpcamp
restart: always
build: .
ports:
- 80:3000
links:
- mongo
volumes: ["./:/usr/src/app"]
mongo:
container_name: mongo
image: mongo
ports:
- 27017:27017
Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
我的docker文件包含npm install
,它在構建映像時成功執行。
您只復制package.json,因此您需要創建node_modules文件夾:
dockerised-yelpcamp | npm WARN Local package.json exists, but node_modules missing, did you mean to install?
如果我的記憶力很好,默認情況下docker容器不能回答是。 因此,他跳過創建文件夾並且node_modules保持缺失狀態。
您的Dockerfile
volumes:
指令隱藏了Dockerfile
對本地系統內容所做的一切。 如果那里沒有node_modules
目錄,或者它的體系結構或庫堆棧與容器中的內容不兼容,則此設置根本不起作用。
常見的解決方法似乎是聲明第二個匿名卷來保存node_modules
,這將一直node_modules
,直到您更改package.json
文件。
我的建議是完全刪除volumes:
指令。 無需Docker即可在本地開發應用程序。 一旦它工作並且你已經測試過它,使用這個Dockerfile
來重建圖像。 這兩者都為您提供了一個更簡單的非Docker開發設置,並復制了您在生產環境中的環境(除了包含它的Docker鏡像之外,您不會復制應用程序代碼)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.