node js. Почитав про процесс работы с нодой под докером, выбрал для себя следующую схему: на локальной машине с федорой 35 поднимаю всю конфигурацию и подтягиваю зависимости, затем архивирую node_modules app.tar.gz, собираю проект через dockerfile:
FROM node:current-alpine3.14
WORKDIR /var/www/scripts
ADD app.tar.gz ./
ADD /scripts/package.json ./
ADD /scripts/server.js ./
EXPOSE 80
RUN npm install --production
COPY . .
CMD [ "npm", "start"]
Однако контейнер не стартует, лог контейнера выводит что не хватает зависимостей, хотя я всё вроде подтянул. В чём проблема? Логи ошибки:
node:internal/modules/cjs/loader:942
throw err;
^
Error: Cannot find module 'laravel-mix'
Require stack:
- /var/www/scripts/server.js
at Module._resolveFilename (node:internal/modules/cjs/loader:939:15)
at Module._load (node:internal/modules/cjs/loader:780:27)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/var/www/scripts/server.js:1:21)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:827:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/var/www/scripts/server.js' ]
}
Node.js v18.2.0
node:internal/modules/cjs/loader:942
throw err;
^
Error: Cannot find module 'laravel-mix'
Require stack:
- /var/www/scripts/server.js
at Module._resolveFilename (node:internal/modules/cjs/loader:939:15)
at Module._load (node:internal/modules/cjs/loader:780:27)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/var/www/scripts/server.js:1:21)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:827:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/var/www/scripts/server.js' ]
}
Node.js v18.2.0
А зачем архивировать node_modules?
И зачем в конце делать COPY . . ? Ты таким образом не переписываешь всё, что ты до этого установил в node_modules?
Чтобы передать архив в контейнер и не подтягивать зависимости при каждом запуске.
Зависимости не устанавливаются при каждом запуске, если они не изменились, оно обновляет только часть с исходниками, остальное берётся из кеша
Обсуждают сегодня