Метеоритный докер Node.js версия не соответствует

#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. Используйте более старый метеор(1.2) с node.js(8.6.4). Раньше это был наш проект.
  2. Продолжайте выяснять ошибки на основе node.js (16.10), на что потребуется время.
  3. Или есть какой-то способ изменить запущенное окно настройки 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 в своей операционной системе, а не внутри проекта.