我试图在Docker容器中运行Java Spring Boot应用程序。 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
,但里面没有文件。
如果我在本地运行jar(没有docker容器),则可以正常运行。
我不确定我在这里错过了什么?