сбой npm install -g apiconnect в контейнере Docker (RHEL8)

#docker #loopback #apiconnect #rhel8

#docker #loopback #apiconnect #rhel8

Вопрос:

Мне нужно создать контейнер на основе RHEL 8, а затем установить LoopBack и IBM ApiConnect.

  • Запустите контейнер с RedHat Enterprise Linux 8
 docker run -it --name api-framework-rhel8 -v ~/api-framework-rhel8:/api-framework-rhel8 registry.access.redhat.com/ubi8/ubi:8.1 bash
  
  • Установка Node.js (v12) в контейнер
 curl -sL https://rpm.nodesource.com/setup_12.x | bash -

yum install -y nodejs
  
  • Установите средства разработки для создания собственных дополнений
 yum install gcc-c   make

yum install python38

yum install python27
  
  • Использовать alternatives для сопоставления python с python2 (или python3 ) — Попробовал оба, и оба не удалось во api-connect время установки.
 alternatives --set python /usr/bin/python2
  
  • Установите LoopBack
 npm install -g loopback-cli
  

Установите ApiConnect

 npm install -g --unsafe-perm=true --allow-root apiconnect
  

Однако это не удается с сообщением об ошибке (с консоли, 2 набора):

 gyp: [Errno 2] No such file or directory while executing command '['python', './generate_build_id.py']' in binding.gyp while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.19.76-linuxkit
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/apiconnect/node_modules/appmetrics
gyp ERR! node -v v12.18.4
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok 
  

Обратите внимание, что python2 и python3 устанавливаются в /usr/bin контейнере и доступны из контейнера, однако python их нельзя вызвать.

Второй набор ошибок с консоли:

 Error: appmetrics@3.1.3 install: `node extract_all_binaries.js || node-gyp rebuild`
error code ELIFECYCLE
error errno 1
error appmetrics@3.1.3 install: `node extract_all_binaries.js || node-gyp rebuild`
error Exit status 1
error Failed at the appmetrics@3.1.3 install script.
error This is probably not a problem with npm. There is likely additional logging output above.
  

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

1. Попробуйте запустить установку npm с --loglevel verbose помощью для получения более подробной информации, но, как первоначальное предположение, может быть, у вас не установлен Python 2.7? Вероятно, это требуется.

2. Привет, Мэтт, выполнил a yum install -y python27 , а затем попытался запустить --loglevel verbose . « 60183 подробная ошибка стека: appmetrics@3.1.3 установка: node extract_all_binaries.js || node-gyp rebuild 60190 код ошибки ELIFECYCLE 60191 ошибка errno 1 ошибка 60192 appmetrics@3.1.3 установка: node extract_all_binaries.js || node-gyp rebuild ошибка 60192 Статус выхода 1 ошибка 60193 Сбой при appmetrics@3.1.3 ошибка install script. 60193 Вероятно, это не проблема с npm. Вероятно, есть дополнительный вывод журнала выше. «`

3. Потребуется увидеть больше выходных данных журнала, чем это. В дополнение к сообщениям об ошибках попробуйте записать больше журнала, непосредственно предшествующего строкам ошибок, и добавьте их в свой вопрос выше. (Комментарии плохо работают для такого типа вывода!)

4. Мэтт, я обновил ошибки в приведенном выше вопросе. Я также могу сделать доступным в GitHub полный набор консольных сообщений и файл журнала.

5. запуск python --version после установки скрипта python проверяет, какую версию python использует для сборки по умолчанию.

Ответ №1:

Эта версия узла работала для меня: node-v8.8.1

Ответ №2:

Я заметил, что вы используете Node.js 12.x. Инструментарий apiconnect поддерживает только Node.js 10.x.

Я перепробовал большинство шагов в вашем вопросе, но переключился на узел 10, и это, похоже, решило проблему.

Кроме того, обязательно установите python27 и запустите alternatives --set python /usr/bin/python2 , как вы упомянули.

Вот полный файл Dockerfile, который я использовал:

 FROM registry.access.redhat.com/ubi8/ubi:8.1

RUN yum update -y amp;amp; 
    yum install -y python27 gcc-c   make

RUN alternatives --set python /usr/bin/python2

RUN curl -sL https://rpm.nodesource.com/setup_10.x | bash - amp;amp; 
    yum install -y nodejs

RUN npm i -g --unsafe-perm=true apiconnect

CMD ["bash"]