В моем проекте Node.JS я использую пакет " node-oracledb ", который подключается к удаленной базе данных ORACLE .Я разработал этот проект в ОС Windows 10, и он отлично работает.Сейчас на рабочем сервере (CentOS) я создал Docker Image с помощью следующего Dockerfile:
FROM node:latest
COPY / ./
EXPOSE 3001
CMD ["npm", "start"]
Он создает Docker Image без каких-либо ошибок.Затем я создаю Docker Container, но, к сожалению, в логах замечаю эту ошибку:
/src/node_modules/oracledb/lib/oracledb.js:68
throw new Error(nodbUtil.getErrorMessage('NJS-045', nodeInfo));
^
Error: NJS-045: cannot load the oracledb add-on binary for Node.js 8.12.0 (linux, x64)
Cannot load /src/node_modules/oracledb/build/Release/oracledb.node
/src/node_modules/oracledb/build/Release/oracledb.node: invalid ELF header
Node-oracledb installation instructions: https://oracle.github.io/node-oracledb/INSTALL.html
You must have 64-bit Oracle client libraries in LD_LIBRARY_PATH, or configured with ldconfig.
If you do not have Oracle Database on this computer, then install the Instant Client Basic or Basic Light package from
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
at Object.<anonymous> (/src/node_modules/oracledb/lib/oracledb.js:68:13)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/src/node_modules/oracledb/index.js:1:80)
at Module._compile (module.js:653:30)
Как решить эту проблему?
Я использую инструкцию из [официальной документации] [2] для установки клиента иустановить переменную окружения.Ошибка в краже такая же.Также я подумал, что могу попытаться установить oracle client внутри докера, но я не знаю, как это сделать.Что вы думаете об этом?
Я меняю Dockerfile.Я добавляю эту команду:
RUM npm rebuild oracledb
Это вызывает новую ошибку закрытия:
/node_modules/oracledb/lib/oracledb.js:65
throw new Error(nodbUtil.getErrorMessage('NJS-045', nodeInfo));
^
Error: NJS-045: cannot load the oracledb add-on binary for Node.js 11.4.0 (linux, x64)
Node.js require() error was:
DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
Node.js require() mapped to /node_modules/oracledb/build/Release/oracledb.node
Node-oracledb installation instructions: https://oracle.github.io/node-oracledb/INSTALL.html
You must have 64-bit Oracle client libraries in LD_LIBRARY_PATH, or configured with ldconfig.
If you do not have Oracle Database on this computer, then install the Instant Client Basic or Basic Light package from
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
at Object.<anonymous> (/node_modules/oracledb/lib/oracledb.js:65:13)
at Module._compile (internal/modules/cjs/loader.js:723:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:734:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Module.require (internal/modules/cjs/loader.js:659:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/node_modules/oracledb/index.js:1:80)
at Module._compile (internal/modules/cjs/loader.js:723:30)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! saturn-backend@0.0.0 start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the saturn-backend@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-12-28T12_06_50_714Z-debug.log
[1]: https://github.com/oracle/node-oracledb
[2]: https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html