UnsatisfiedLinkError: /tmp/snappy-1.1.4-libsnappyjava.so Error loading shared library ld-linux-x86-64.so.2: No such file or directory
In my case, install the missing libc6-compat didn't work. Application still throw java.lang.UnsatisfiedLinkError
.
Then I find in the docker, /lib64/ld-linux-x86-64.so.2
exist and is a link to /lib/libc.musl-x86_64.so.1
, but /lib
only contains ld-musl-x86_64.so.1
, not ld-linux-x86-64.so.2
.
So I add a file named ld-linux-x86-64.so.2
linked to ld-musl-x86_64.so.1
in /lib
dir and solve the problem.
Dockerfile I use:
FROM openjdk:8-jre-alpine
COPY entrypoint.sh /entrypoint.sh
RUN apk update && \
apk add --no-cache libc6-compat && \
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 && \
mkdir /app && \
chmod a+x /entrypoint.sh
COPY build/libs/*.jar /app
ENTRYPOINT ["/entrypoint.sh"]
In conclusion:
RUN apk update && apk add --no-cache libc6-compat
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
Error message states that *libsnappyjava.so cannot find ld-linux-x86-64.so.2. This is a glibc dynamic loader, while Alpine image doesn't run with glibc. You may try to get it running by installing libc6-compat package in your Dockerfile, e.g.:
RUN apk update && apk add --no-cache libc6-compat
There are two solutions of this problem:
You may use some other base image with pre-installed
snappy-java
lib. For exampleopenjdk:8-jre-slim
works fine for meAnd the other solution is to still use
openjdk:8-jdk-alpine
image as base one, but then installsnappy-java
lib manually:
FROM openjdk:8-jdk-alpine
RUN apk update && apk add --no-cache gcompat
...