#node.js #docker #meteor #docker-compose
Вопрос:
У меня только что построен докер meteor,докер установлен с node.js версия 8.9.4. После успешной сборки я проверяю журнал докеров, в нем говорится, что для meteor требуется более высокая версия узла (12.0 выше). Ошибка, подобная этой:
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - /app/bundle/programs/server/mini-files.js:1
data: /app/bundle/main.js:34 - (function (exports, require, module, __filename, __dirname) { module.export({
data: /app/bundle/main.js:34 - ^
data: /app/bundle/main.js:34 - TypeError: module.export is not a function
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/mini-files.js:1:76)
data: /app/bundle/main.js:34 - at Module._compile (module.js:643:30)
data: /app/bundle/main.js:34 - at Object.Module._extensions..js (module.js:654:10)
data: /app/bundle/main.js:34 - at Module.load (module.js:556:32)
data: /app/bundle/main.js:34 - at tryModuleLoad (module.js:499:12)
data: /app/bundle/main.js:34 - at Function.Module._load (module.js:491:3)
data: /app/bundle/main.js:34 - at Module.require (module.js:587:17)
data: /app/bundle/main.js:34 - at require (internal/module.js:11:18)
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/boot.js:14:15)
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/boot.js:469:3)
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - error: Script restart attempt #1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - /app/bundle/programs/server/mini-files.js:1
data: /app/bundle/main.js:34 - (function (exports, require, module, __filename, __dirname) { module.exports({
data: /app/bundle/main.js:34 - ^
data: /app/bundle/main.js:34 - TypeError: module.exports is not a function
data: /app/bundle/main.js:34 - at Object.<anonymous> (/app/bundle/programs/server/mini-files.js:1:70)
data: /app/bundle/main.js:34 - at Module._compile (module.js:643:30)
data: /app/bundle/main.js:34 - at Module.Mp._compile (/app/bundle/programs/server/runtime.js:50:23)
data: /app/bundle/main.js:34 - at Object.Module._extensions..js (module.js:654:10)
data: /app/bundle/main.js:34 - at Module.load (module.js:556:32)
data: /app/bundle/main.js:34 - at Module.Mp.load (/app/bundle/programs/server/runtime.js:15:31)
data: /app/bundle/main.js:34 - at tryModuleLoad (module.js:499:12)
data: /app/bundle/main.js:34 - at Function.Module._load (module.js:491:3)
data: /app/bundle/main.js:34 - at Module.require (module.js:587:17)
data: /app/bundle/main.js:34 - at require (internal/module.js:11:18)
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
data: /app/bundle/main.js:34 - error: Script restart attempt #1
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
error: undefined
data: /app/bundle/main.js:34 - Meteor requires Node v12.0.0 or later.
data: /app/bundle/main.js:34 - error: Forever detected script exited with code: 1
(base) [wangz35@ehslocvld01 tblBuilder]$
Поэтому я проверил свой файл dockerfile, в нем было указано, ЧТО он находится В узле.8.9.4, поэтому я изменил его на узел 16.10.0.
# node version dependent on meteor version
#FROM node:8.9.4
## node 16.10.0 is used for meteor 2.2, check release file.
FROM node:16.10.0
Затем разверните это. Во время развертывания я обнаружил, что многие пакеты не могут быть установлены во время этой версии узла. Например, Джесси-бэкпорт, Джесси.
RUN
echo "deb [check-valid-until=no] http://cdn-fastly.deb.debian.org/debian jessie main" > /etc/apt/sources.list.d/jessie.list amp;amp;
echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list amp;amp;
sed -i '/deb http://deb.debian.org/debian jessie-updates main/d' /etc/apt/sources.list amp;amp;
apt-get -o Acquire::Check-Valid-Until=false update amp;amp;
Они выдали такие ошибки, я уверен, что эта ошибка не выйдет, когда я изменюсь node.js до 8.9.4:
W: GPG error: http://cdn-fastly.deb.debian.org/debian jessie Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7638D0442B90D010 NO_PUBKEY CBF8D6FD518E17E1
out: E: The repository 'http://cdn-fastly.deb.debian.org/debian jessie Release' is not signed.
out: W: GPG error: http://archive.debian.org/debian jessie-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
out: E: The repository 'http://archive.debian.org/debian jessie-backports InRelease' is not signed.
И я обнаружил, что эти ошибки трудно решить. Я пришел к выводу о некоторых решениях:
- Используйте более старый метеор(1.2) с node.js(8.6.4). Раньше это был наш проект.
- Продолжайте выяснять ошибки на основе node.js (16.10), на что потребуется время.
- Или есть какой-то способ изменить запущенное окно настройки node.js версия?
Любой, кто хорош в этом развертывании докера, может дать мне несколько советов. Заранее спасибо.
Ответ №1:
Если вы хотите установить пакеты debian вместе с meteor, вам следует запустить FROM
образ debian, а не один из node
них, а затем просто извлечь узел из nodesource.com в свой файл Dockerfile и установите его, чтобы убедиться, что вы получили правильную версию. Кстати, meteor 2.2 использует узел 14, если я не ошибаюсь, еще не 16 (что еще не LTS).
Комментарии:
1. Спасибо. Вы правы, это узел 14. Я думаю, так как я использую meteor 2.2, узел 8.9.6 в моем локальном колодце, почему, когда он находится в развернутом докере, meteor 2.2 запрашивает узел 12 выше. Я действительно не хочу менять файл docker с 8.9.6 на узел 12. что доставит мне много хлопот.
Ответ №2:
В моих проектах в каждом файле Dockerfile я устанавливаю точную версию узла, которую должна использовать версия Meteor. Универсальная версия-не очень хорошая идея.
Например: приложение Meteor версии 2.4, я использую версию узла 14.17.6
Вы можете получить версию Meteor vs Node в документации по списку изменений Meteor
Комментарии:
1. Вы также можете быстро проверить версию узла проекта Meteor во время разработки с помощью команды
meteor node -v
и после производственной сборки в файле.node_version.txt
.2. Спасибо. Вы правы, это узел 14. Я думаю, так как я использую meteor 2.2, узел 8.9.6 в моем локальном колодце, почему, когда он находится в развернутом докере, meteor 2.2 запрашивает узел 12 выше. Я действительно не хочу менять файл docker с 8.9.6 на узел 12. что доставит мне много хлопот.
3. Если ваш Метеор равен 2,2, ваш узел не может быть 8. См.раздел Использование команды
meteor node -v
внутри вашего корневого проекта. Я полагаю, что вы видите версию Node в своей операционной системе, а не внутри проекта.