【发布时间】:2022-08-03 20:10:55
【问题描述】:
我想 Dockerize 一个 web 应用程序,它在本地工作得很好。尝试在 Docker 中运行应用程序时,在调用 Nauty 库中的函数时会引发 UnsatisfiedLinkError。
要在本地使用此库,必须通过以下方式启动 Spring 应用程序
java -Djava.library.path=\"<PATH>/backend/lib/\" -jar backend.jar
此库路径指向 Nauty 库 (libnauty.so) 所在的目录。在我的 ~/.bashrc 中,我还必须设置环境变量 LD_LIBRARY_PATH=<PATH>/backend/lib/:/usr/local/lib。进行这两项更改后,应用程序可以正常工作,并且可以毫无问题地调用 Nauty 库中的函数。
Dockerizing 应用程序后,调用库函数时出现以下错误
java.lang.UnsatisfiedLinkError: no nauty in java.library.path: \"/home/backend/lib/\"
但是,libnauty.so 文件被复制到 Docker 容器中,并且存在于 /home/backend/lib 目录中。我还在 Docker 容器中设置了环境变量 LD_LIBRARY_PATH。然而问题仍然存在。
我使用 docker-compose 来设置应用程序。后端的 Dockerfile 如下所示。
FROM openjdk:17-oracle
ARG JAR_FILE=target/*.jar
EXPOSE 8080
ENV LD_LIBRARY_PATH=/home/backend/lib/:/usr/local/lib
COPY ${JAR_FILE} /home/backend/backend.jar
COPY . /home/backend
ENTRYPOINT [\"java\", \"-Djava.library.path=\\\"/home/backend/lib/\\\"\", \"-jar\", \"/home/backend/backend.jar\"]
任何有关如何解决此问题的指针将不胜感激。我已经环顾了很长时间,但我似乎无法解决问题。
标签: java docker shared-libraries unsatisfiedlinkerror