【问题标题】:UnsatisfiedLinkError using openjdk:17 inside Docker containerUnsatisfiedLinkError 在 Docker 容器中使用 openjdk:17
【发布时间】: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=&lt;PATH&gt;/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


    【解决方案1】:

    经过数小时的谷歌搜索和调试,问题出在 ENTRYPOINT 中的库路径周围的双引号。指定它的正确方法只是

    ENTRYPOINT ["java", "-Djava.library.path=/home/backend/lib/", "-jar", "/home/backend/backend.jar"]
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-26
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多