Couchbaselite in docker container

Greetings!

I have an application that is using com.couchbase.lite:couchbase-lite-java-ee:2.7.0. It is a jar file. When I run it works perfectly.

However, I want to run it in docker container which is based on linux. I get an error:
Exception in thread “main” java.lang.IllegalStateException: Cannot load native library for Linux/amd64
at com.couchbase.lite.NativeLibrary.load(NativeLibrary.java:60)
at com.couchbase.lite.CouchbaseLite.init(CouchbaseLite.java:54)
at com.kotlin.fwws.seedgenerator.Main$Companion.main(Main.kt:20)
at com.kotlin.fwws.seedgenerator.Main.main(Main.kt)
Caused by: java.lang.UnsatisfiedLinkError: /tmp/com.couchbase.lite.java/native/edc465e4771f6e83343e528fd8d20ab2/libLiteCore.so: libicuuc.so.54: cannot open shared object file: No such file or directory
at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
at java.base/java.lang.ClassLoader$NativeLibrary.load(Unknown Source)
at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.load0(Unknown Source)
at java.base/java.lang.System.load(Unknown Source)
at com.couchbase.lite.NativeLibrary.load(NativeLibrary.java:55)

My question is how to do this properly?
Here is my docker file:

FROM openjdk:11-jre-slim

#support/linux/x86_64/…
COPY cblib/ /opt/cblib/

RUN touch $CATALINA_BASE/bin/setenv.sh

RUN echo “#!/bin/bash” >> $CATALINA_BASE/bin/setenv.sh
RUN echo “export LD_LIBRARY_PATH=/opt/cblib/support/linux/x86_64/libicu:$LD_LIBRARY_PATH” >> $CATALINA_BASE/bin/setenv.sh
RUN echo “export LD_LIBRARY_PATH=/opt/cblib/support/linux/x86_64/libz:$LD_LIBRARY_PATH” >> $CATALINA_BASE/bin/setenv.sh
RUN echo “export LD_LIBRARY_PATH=/opt/cblib/support/linux/x86_64/libc++:$LD_LIBRARY_PATH” >> $CATALINA_BASE/bin/setenv.sh
RUN chmod u+x $CATALINA_BASE/bin/setenv.sh

COPY build/libs/fat.jar /opt/app/fat.jar

ENTRYPOINT [“java”]
CMD ["-jar", “/opt/app/fat.jar”]

The solution is simple:

ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cblib/support/linux/x86_64/libicu/
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cblib/support/linux/x86_64/libz/
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cblib/support/linux/x86_64/libc++/

works great now

1 Like