Hi, our app is nodes based and needs to query Oracle DB, so we install NPM oracledb package. So our Docker image is based on oracle instant client (
https://hub.docker.com/r/asg1612/alpine-oracle-instantclient
), the Docker file looks like following:
FROM frolvlad/alpine-glibc
RUN apk update && apk add libaio
COPY instantclient_12_1.zip ./
RUN unzip instantclient_12_1.zip && \
mv instantclient_12_1/ /usr/lib/ && \
rm instantclient_12_1.zip && \
ln /usr/lib/instantclient_12_1/libclntsh.so.12.1 /usr/lib/libclntsh.so && \
ln /usr/lib/instantclient_12_1/libocci.so.12.1 /usr/lib/libocci.so && \
ln /usr/lib/instantclient_12_1/libociei.so /usr/lib/libociei.so && \
ln /usr/lib/instantclient_12_1/libnnz12.so /usr/lib/libnnz12.so
ENV ORACLE_BASE /usr/lib/instantclient_12_1
ENV LD_LIBRARY_PATH /usr/lib/instantclient_12_1
ENV TNS_ADMIN /usr/lib/instantclient_12_1
ENV ORACLE_HOME /usr/lib/instantclient_12_1
#install
node js
RUN apk add nodejs npm
#install
our App
RUN mkdir -p /var/app
WORKDIR /var/app
ADD package.json /var/app
COPY . /var/app
#Now
start node
CMD [“npm”,“start”]
But when our app starts using ‘oracledb’ NPM package, it got following error:
**init() error: 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/libclntsh.so)”. …
So Oracle client couldn’t find libnsl.so.1 even thought it should come with glibc, and I can see that it is under:
‘/usr/glibc-compat/lib’.
Any ideas how to fix this? Thanks in Advance.
-Andy
You have to add this to your Dockerfile:
RUN echo “
http://dl-cdn.alpinelinux.org/alpine/edge/community
” >> /etc/apk/repositories &&
apk add --update libaio libnsl &&
ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1
and then add the packages libc6-compat and gcompat
Well its not working for me so probably not. I’m bit confused that people find libnsl.so.1 in the /etc/glibc-compat/lib folder but then point to some other version that seems to be version 2. Why not symlink the glibc version that matches?
btw glibc0compat/lib is actually /usr/glibc-compat/lib right?