Проблема с node-oracledb внутри контейнера Docker - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение Nest. js, которое подключается к базе данных Oracle через TypeORM, и я пытаюсь поместить свое приложение в контейнер, используя Docker. Итак, проблема в том, что когда приложение не помещено в контейнер, оно работает нормально, но когда я это делаю, я получаю следующую ошибку.

[Nest] 19   - 06/16/2020, 4:00:52 AM   [TypeOrmModule] Unable to connect to the database. Retrying (4)... +3003ms
 Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: "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-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 OracleDb.createPool (/app/node_modules/oracledb/lib/oracledb.js:202:8)
    at OracleDb.createPool (/app/node_modules/oracledb/lib/util.js:185:19)

Я обязательно добавил зависимости, необходимые для тонкого клиента Oracle в свой файл Docker, как показано ниже

FROM oraclelinux:7-slim
RUN  yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
   yum-config-manager --disable ol7_developer_EPEL --enable ol7_oracle_instantclient && \
   yum -y install oracle-instantclient19.5-basiclite && \
   rm -rf /var/cache/yum

FROM node:10
WORKDIR /app
COPY ./package.json ./

Я не уверен, что еще добавить сюда заставить эту работу. Я получил некоторые инструкции о том, что добавить для клиента oracle отсюда https://oracle.github.io/node-oracledb/INSTALL.html#docker

1 Ответ

0 голосов
/ 27 июня 2020

Похоже, вы пытаетесь использовать многоступенчатую сборку. Я обсуждал это в «Node.js Dockerfile Example 3» в моем блоге posst Docker для Oracle приложений баз данных в Node.js и Python.

Вы можете попробовать что-нибудь например:

FROM oraclelinux:7-slim as builder

ARG release=19
ARG update=5

RUN yum -y install oracle-release-el7 &&
     oracle-instantclient${release}.${update}-basiclite

RUN rm -rf /usr/lib/oracle/${release}.${update}/client64/bin
WORKDIR /usr/lib/oracle/${release}.${update}/client64/lib/
RUN rm -rf *jdbc* *occi* *mysql* *jar

# Get a new image
FROM node:12-buster-slim

# Copy the Instant Client libraries, licenses and config file from the previous image
COPY --from=builder /usr/lib/oracle /usr/lib/oracle
COPY --from=builder /usr/share/oracle /usr/share/oracle
COPY --from=builder /etc/ld.so.conf.d/oracle-instantclient.conf /etc/ld.so.conf.d/oracle-instantclient.conf

RUN apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get install -y libaio1 && \
    apt-get -y autoremove && apt-get -y clean && \
    ldconfig

В целом это, вероятно, не стоит сложностей. Посмотрите на другой пример в сообщении в блоге. Или используйте Dockerfile Oracle: https://github.com/oracle/docker-images/tree/master/OracleLinuxDevelopers/oraclelinux7/nodejs/12-oracledb

...