LINUX.ORG.RU
ФорумAdmin

Проблемы при добавлении Oracle Basic Client 19.25 в Dockerfile.

 , ,


0

1

Добрый день, проблема возникла с установкой Oracle Basic Light Client в контейнере. Образ alpine 20, клиент oracle 19.25. код выглядит так:

FROM node:20-alpine
RUN apk --no-cache add libaio libnsl libc6-compat curl && \
cd /tmp && \
curl -o instantclient-basic.zip https://download.oracle.com/otn_software/linux/instantclient/1925000/instantclient-basic-linux.x64-19.25.0.0.0dbru.zip -SL && \
unzip instantclient-basic.zip && \
mv instantclient*/ /usr/lib/instantclient && \
rm instantclient-basic.zip && \
ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \
ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \
ln -s /usr/lib/instantclient/libociicus.so /usr/lib/libociicus.so && \
ln -s /usr/lib/instantclient/libnnz19.so /usr/lib/libnnz19.so && \
ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1 && \
ln -s /usr/lib/libnsl.so.2 /usr/lib/instantclient/libnsl.so.1 && \
ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \
ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2
ENV ORACLE_BASE /usr/lib/instantclient
ENV LD_LIBRARY_PATH /usr/lib/instantclient
ENV TNS_ADMIN /usr/lib/instantclient
ENV ORACLE_HOME /usr/lib/instantclient
ENV NODE_ENV production

При обращении к переменной LD_LIBARY_PATH вылетает ошибка в portainer:

ERR DPI-1047: Cannot locate a 64-bit Oracle Client library: "Error loading shared library libnsl.so.1: No such file or directory (needed by /usr/lib/instantclient/libclntsh.so)". See https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html for help
Node-oracledb installation instructions: https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html
You must have Linux 64-bit Oracle Client libraries configured with ldconfig, or in LD_LIBRARY_PATH.
If you do not have Oracle Database on this computer, then install the Instant Client Basic or Basic Light package from 
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

Как я понимаю, клиенту не хватает libaio1 (из репы alpine устанавливается версия 2, я сделал мягкую ссылку с указанием версии 1, но клиент, похоже, не хочет его использовать). Могил бы подсказать, куда копать, чтобы решить проблему?

Перемещено hobbit из general

libnsl.so.1: No such file or directory

И при чём здесь libaio?

Вообще libnsl.so.1 это часть glibc. Но Alpine Linux использует не glibc, а musl. Ставить Oracle Client в не-glibc систему это плохая идея. Лучше использовать в качестве базового образа не alpine, а что-нибудь glibc-based. Например, node:20 (на базе debian bookworm).

iliyap ★★★★★
()
Ответ на: комментарий от coin_eater

Инит проходит

Welcome to Node.js v20.18.1.
Type ".help" for more information.
> const oracledb = require('oracledb');
undefined
> oracledb.initOracleClient();
undefined
FROM node:20-alpine

ENV VERSION='19_25'

ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_${VERSION}:${LD_LIBRARY_PATH}"

ENV INSTANTCLIENT_BASIC_LINUX_URL='https://download.oracle.com/otn_software/linux/instantclient/1925000/instantclient-basic-linux.x64-19.25.0.0.0dbru.zip'

RUN \
  wget \
    -O /tmp/instantclient-basic-linux.zip \
    -T 120 \
    "${INSTANTCLIENT_BASIC_LINUX_URL}" && \
  unzip -t /tmp/instantclient-basic-linux.zip && \
  unzip /tmp/instantclient-basic-linux.zip -d /opt/oracle && \
  ln -vs /lib/ld-musl-x86_64.so.1 /opt/oracle/instantclient_${VERSION}/ld-linux-x86-64.so.2 && \
  ln -vs /lib/libc.musl-x86_64.so.1 /opt/oracle/instantclient_${VERSION}/libresolv.so.2 && \
  ln -vs /usr/lib/libnsl.so.3.0.0  /opt/oracle/instantclient_${VERSION}/libnsl.so.1 && \
  apk --no-cache add libaio libnsl && \
  rm -rfv \
    /tmp/* \
    /var/cache/apk/*
itn ★★★
()