簡體   English   中英

節點在dockerized node app中找不到node_modules

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM