Ошибка при загрузке библиотеки .so в Docker-контейнере при запуске файла JAR - PullRequest
1 голос
/ 06 марта 2019

Я пытался запустить загрузочное приложение java внутри контейнера Docker. Файл jar (testapp.jar) содержит все зависимости, и одна из них включает в себя библиотеку .so (libjsimplerdma.so). Когда я запускаю образ, он выдает следующие исключения:

java.lang.UnsatisfiedLinkError: /tmp/jxio8802823867088/libjsimplerdma.so: libsimplerdma.so: cannot open shared object file: No such file or directory

Мой Dockerfile имеет:

FROM centos:7
WORKDIR /
RUN yum update -y \
   && yum -y install gcc glibc glibc-common \
   && yum -y install cmake \
   && yum -y install epel-release \
   && yum -y install python python-pip libxslt-devel python-devel libxml2- devel \
   && yum -y install java \
   && yum -y clean all

COPY testapp.jar /var/lib/test-app/testapp.jar
COPY application.properties /var/lib/test-app/application.properties
ADD run-test-app.sh /

USER root
ENTRYPOINT ["/run-test-app.sh"]

А внутри run-test-app.sh у меня есть:

#!/bin/bash

echo "Starting testapp"
cd /var/lib/test-app
java -Djava.library.path=/tmp/ -jar testapp.jar -- spring.config.location=/var/lib/test-app/  

testapp.jar включает в себя jtest-rdma.jar, который содержит файл libjsimplerdma.so:

В testapp.jar:

38713 Wed Feb 27 11:55:10 EST 2019 BOOT-INF/lib/jtest-rdma.jar

И у jtest-rdma.jar есть libjsimplerdma.so:

19024 Wed Feb 27 11:55:10 EST 2019 libjsimplerdma.so

Когда я запускаю образ с помощью Docker, я получаю следующие ошибки:

Native code library failed to load
java.lang.UnsatisfiedLinkError: /tmp/jxio8802823867088/libjsimplerdma.so: libsimplerdma.so: cannot open shared object file: No such file or directory

И когда я проверяю /tmp, я вижу только созданный каталог jxio8802823867088, но внутри нет файла.

Если я запускаю банку локально (без док-контейнера), она работает нормально.

Я не уверен, что я здесь пропустил?

...