Ошибка во время выполнения в контейнере docker, модуль не найден

#node.js #docker #containers

Вопрос:

Прошу прощения за вопрос новичка, но я выяснял эту ошибку, у меня есть приложение Express, и я пытаюсь запустить его как контейнер docker. Я использовал этот Dockerfile:

 FROM node:14.17.0-alpine
COPY /src /nodejs
WORKDIR /nodejs
ADD package*.json ./
RUN npm install

CMD [ "node", "app.js" ]
 

и это мой package.js файл :

 {
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js -e js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "express-rate-limit": "^5.1.3",
    "nodemon": "^2.0.3",
    "prom-client": "^12.0.0",
    "puppeteer": "^10.4.0"
  }
}
 

Я использую Windows 10, и команда, которую я использовал для развертывания контейнера, :

 docker run --name express-api -d -p 4000:4000 docker-express-app
 

ошибка, которую я получаю после выполнения приведенной выше команды в power shell:

 internal/modules/cjs/loader.js:888

  throw err;

  ^


Error: Cannot find module '/nodejs/app.js'

    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:885:15)

    at Function.Module._load (internal/modules/cjs/loader.js:730:27)

    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)

    at internal/main/run_main_module.js:17:47 {

  code: 'MODULE_NOT_FOUND',

  requireStack: []

}
 

приветствуется любая идея по этому вопросу.

P.S: моя иерархия проекта выглядит так :

https://i.stack.imgur.com/ptlkI.png

Ответ №1:

Вы не СКОПИРОВАЛИ app.js файл в вашем контейнере.

 WORKDIR /nodejs
COPY src .
COPY app.js .
ADD package*.json ./
RUN npm install

CMD [ "node", "app.js" ]
 

Это должно исправить это.

Я думаю, что более простым способом может быть создание файла dockerignore и копирование всего. Другая проблема заключается в том, что вы используете ADD вместо COPY . Вам просто нужно скопировать ваши файлы в контейнер, и я думаю, что КОПИРОВАНИЯ будет достаточно, поскольку ADD обладает некоторыми дополнительными функциями, которые могут сбивать с толку.

Комментарии:

1. Спасибо, vanshaj, это сработало для первой части, но затем выдает другую ошибку, на этот раз о файлах js в папке src (те же не найденные модули). есть идеи?

2. Не уверен. Какой путь к модулю в ошибке?

3. ‘./src/routers/router’. Он включен в app.js досье.

4. ваншай, я наконец-то заработал, скопировав все с помощью COPY . .

5. отлично. убедитесь, что вы не добавляете node_modules и другие ненужные файлы, добавив их в dockerignore.