我在公司防火墙后面,我有一个 node.js 应用程序可以通过 docker 映像部署在 Openshift 容器上。该应用程序需要 oracledb 附加二进制文件 - 要在服务器上配置的 Oracle InstantClient 软件包。
我有以下 Dockerfile:
FROM devops-automation-docker<....>/rhel7-nodejs-10:latest
RUN mkdir -p /opt/oracle
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY . .
RUN mv instantclient_11_2 /opt/oracle
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_11_2
RUN sh -c "echo /opt/oracle/instantclient_11_2 > /etc/ld.so.conf.d/oracle-instantclient.conf" && \
ldconfig && \
echo ${LD_LIBRARY_PATH} && \
npm ci
EXPOSE 3002
CMD ["node", "server.js"]
构建正在成功,但是当我部署和运行时,它会抛出以下错误:
/usr/src/app/design-pattern-exemplars/node_modules/oracledb/lib/oracledb.js:68 throw new Error(nodbUtil.getErrorMessage('NJS-045', nodeInfo)); ^
错误:NJS-045:无法加载 Node.js 10.16.0(linux、x64)的 oracledb 附加二进制文件 无法加载 /usr/src/app/design-pattern-exemplars/node_modules/oracledb/build/Release/oracledb .node /usr/src/app/design-pattern-exemplars/node_modules/oracledb/build/Release/oracledb.node:无效的ELF头Node-oracledb安装说明: https ://oracle.github.io/node-oracledb/ INSTALL.html 您必须在 LD_LIBRARY_PATH 中有 64 位 Oracle 客户端库,或者使用 ldconfig 进行配置。如果此计算机上没有 Oracle 数据库,请从 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html安装 Instant Client Basic 或 Basic Light 软件包
at Object.<anonymous> (/usr/src/app/design-pattern-exemplars/node_modules/oracledb/lib/oracledb.js:68:13) at Module._compile (internal/modules/cjs/loader.js:776:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Module.require (internal/modules/cjs/loader.js:690:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.<anonymous> (/usr/src/app/design-pattern-exemplars/node_modules/oracledb/index.js:1:18) at Module._compile (internal/modules/cjs/loader.js:776:30)
我究竟做错了什么?
PS 在我看到其他一些关于 SO 的帖子后添加了前 2 个命令,这些帖子有一些类似类型的问题,但它与 docker 无关,而是通过 sudo 运行的。
请帮忙!自从过去 10 天以来,我浏览了其他帖子,现在我感到无助。让我知道是否需要其他任何东西。