Узел не может найти node_modules в приложении закрепляемого узла - PullRequest
0 голосов
/ 17 апреля 2019

Я новичок в докере.Я попытался докернизировать мое существующее приложение узла.Во время 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

docker-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, который успешно выполняется при построении образа.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Ваша директива volumes: скрывает все, что Dockerfile делает с контентом из вашей локальной системы. Если у вас нет каталога node_modules или его архитектура или стек библиотеки несовместимы с содержимым контейнера, эта настройка просто не будет работать.

Обходным решением является объявление второго анонимного тома для хранения node_modules, который будет работать до тех пор, пока вы не измените файл package.json.

Я рекомендую полностью удалить директиву volumes:. Разрабатывайте свое приложение локально без Docker. Как только он заработает и вы проверите его, используйте этот Dockerfile для восстановления образа. Это дает вам более простую настройку разработки без Docker и реплицирует среду, которую вы имеете в рабочей среде (где вы не собираетесь копировать код приложения в дополнение к образу Docker, который его содержит).

0 голосов
/ 17 апреля 2019

Вы копируете только package.json, поэтому вам нужна созданная папка node_modules:

dockerised-yelpcamp | npm WARN Local package.json exists, but node_modules missing, did you mean to install?

если память хорошая, контейнер Docker не может ответить "да" по умолчанию. Таким образом, он пропускает папку создания, а node_modules остаются отсутствующими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...