Search code examples
node.jswindowsoracledockernode-oracledb

Docker return error DPI-1047: cannot locate a 64-bit Oracle library: libclntsh.so. Node.js Windows 10


I'm using in docker container on windows 10 with nodejs. When I try to get data from oracle database - get request (the connection to data base in nodejs code) I get the message: enter image description here

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/node-oracledb/INSTALL.html for help

When I make a get request without the container(run server) the data was return well.

Dockerfile:

FROM node:latest
WORKDIR /app
COPY package*.json app.js ./
RUN npm install
COPY . .
EXPOSE 9000
CMD ["npm", "start"]

connection to oracle:

async function send2db(sql_command, res) {
  console.log("IN");
  console.log(sql_command);
  try {
    await oracledb.createPool({
      user: dbConfig.user,
      password: dbConfig.password,
      connectString: dbConfig.connectString,
    });
    console.log("Connection pool started");
    const result = await executeSQLCommand(sql_command
      // { outFormat: oracledb.OUT_FORMAT_OBJECT }
    );

    return result;
  } catch (err) {
    // console.log("init() error: " + err.message);
    throw err;
  }
}

Solution

  • From Docker for Oracle Database Applications in Node.js and Python here is one solution:

    FROM node:12-buster-slim
    
    WORKDIR /opt/oracle
    
    RUN apt-get update && \
        apt-get install -y libaio1 unzip wget
    RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
        unzip instantclient-basiclite-linuxx64.zip && \
        rm -f instantclient-basiclite-linuxx64.zip && \
        cd instantclient* && \
        rm -f *jdbc* *occi* *mysql* *jar uidrvci genezi adrci && \
        echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && \
        ldconfig
    

    You would want to use a later Node.js version now. The referenced link shows installs on other platforms too.