Skip to main content
Question

Dockerized FME and Oracle Client Installation

  • 5 February 2018
  • 3 replies
  • 28 views

Hello FMEs!!

I am currently working on a modified docker-compose setup for FME 2017.1 that includes the Oracle Client libraries so that FME could access an Oracle Instance. I applied the various guides I found and basically came up with the following Dockerfile for the FME engine:

FROM safesoftware/fmeserver-engine:2017.1.1

# Installation of the Oracle Instant Client
ADD OracleClient/oracle-instantclient*.rpm /tmp/
ENV ORACLE_HOME=/usr/lib/oracle/11.2/client64
RUN apt-get install -y libaio1
RUN alien -i -c -v  /tmp/oracle-instantclient*.rpm && \
    rm -f /tmp/oracle-instantclient*.rpm && \
    echo $ORACLE_HOME/lib > /etc/ld.so.conf.d/oracle-instantclient11.2.conf && \
    ldconfig
ENV PATH=$PATH:$ORACLE_HOME/bin
ENV LD_LIBRARY_PATH=$ORACLE_HOME/lib
ENV TNS_ADMIN=$ORACLE_HOME/network/admin
WORKDIR $LD_LIBRARY_PATH
RUN ln -s libclntsh.so.11.1 libclntsh.so
RUN mkdir $TNS_ADMIN -p
COPY OracleClient/*.ora $TNS_ADMIN/

The modified build for the engine is used in the docker-compose.yml instead of the original image for the engine. Once the whole composition is built and started, I can login into the FME server and I can also publish a Workspace to it. If that workspace contains an Oracle Database Connection, I receive a warning message that this kind of connection is not supported. Once the workspace is published and scheduled for execution, I can see the following message in the logs:

WARNING: Could not find Oracle client libraries in '/usr/lib/oracle/11.2/client64/lib'

My question now is; is that error linked to the fact that I am preparing this on my local machine and have not applied a correct license to the server or is there another reason why FME cannot find the Oracle client libraries?

If I connect to the engine through docker-compose exec fmeserverengine /bin/bash I can start sqlplus and connect to the target server. So apparently the general client setup seems to be working. The lib/ directory seem to contain the correct files:

glogin.sql
libclntsh.so -> libclntsh.so.11.1
libclntsh.so.11.1
libnnz11.so
libocci.so.11.1
libociei.so
libocijdbc11.so
libsqlplusic.so
libsqlplus.so
libsqora.so.11.1
ojdbc5.jar
ojdbc6.jar
xstreams.jar

And also the environment variables are correctly set:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin
ORACLE_HOME=/usr/lib/oracle/11.2/client64
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/oracle/11.2/client64/bin

So at least from my understanding everything is setup correctly. However, it does not work or is not accepted by FME for some reason. 

Any ideas why this is not working? 

@maku,

 

I am not familiair with Dockerized.

But Oracle clients are 32 or 64 bits specific.

Is you're FME install 64 of 32 bits based. You need 64 bits for Oracle 64 bits client.


@maku,

 

I am not familiair with Dockerized.

But Oracle clients are 32 or 64 bits specific.

Is you're FME install 64 of 32 bits based. You need 64 bits for Oracle 64 bits client.

I just exchanged the 64bit versions with the 32bit versions but these do not even install on the container during the build. Now I am trying out different versions...

For those that may run into the same issue. I used the latest 64bit Instant Client and it seems as if the server now recognizes the Oracle installation, Due to a lack of the correct license on my development box I could not test the access to Oracle but at least it seems as if I got one step further.


Reply