简体   繁体   English

npm 在 Docker 容器 (RHEL8) 中安装 -g apiconnect 失败

[英]npm install -g apiconnect fails in Docker container (RHEL8)

I need to build a container based on RHEL 8 and then install LoopBack and IBM ApiConnect.我需要构建一个基于 RHEL 8 的容器,然后安装 LoopBack 和 IBM ApiConnect。

  • Run a container with the RedHat Enterprise Linux 8使用 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
  • Installing Node.js (v12) into the container将 Node.js (v12) 安装到容器中
curl -sL https://rpm.nodesource.com/setup_12.x | bash -

yum install -y nodejs
  • Install development tools to build native addons安装开发工具来构建原生插件
yum install gcc-c++ make

yum install python38

yum install python27
  • Use alternatives to map python to python2 (or python3 ) - Tried both and both failed during api-connect install.使用 map pythonpython2 (或python3 )的alternatives - 都尝试过,但在api-connect安装期间都失败了。
alternatives --set python /usr/bin/python2
  • Install LoopBack安装环回
npm install -g loopback-cli

Install ApiConnect安装 ApiConnect

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

However, this fails with the error message (from the console, 2 sets):但是,这失败并显示错误消息(来自控制台,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 

Note that python2 and python3 are installed under /usr/bin and accessible from the container, however, python can not be called.注意python2python3安装在/usr/bin下,可以从容器中访问,但是python不能调用。

The second set of errors from the console:来自控制台的第二组错误:

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.

I noticed that you're using Node.js 12.x.我注意到您使用的是 Node.js 12.x。 The apiconnect toolkit only supports Node.js 10.x. apiconnect 工具包仅支持 Node.js 10.x。

I tried most of the steps in your question, but switched to Node 10, and that seemed to resolve the issue.我尝试了您问题中的大部分步骤,但切换到 Node 10,这似乎解决了问题。

Also, be sure to install python27 and run alternatives --set python /usr/bin/python2 as you mentioned.另外,请务必安装 python27 并运行alternatives --set python /usr/bin/python2如您所述。

Here's the complete Dockerfile I used:这是我使用的完整 Dockerfile:

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

RUN yum update -y && \
    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 - && \
    yum install -y nodejs

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

CMD ["bash"]

This Node version worked for me: node-v8.8.1这个节点版本对我有用:node-v8.8.1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM