簡體   English   中英

UnsatisfiedLinkError using openjdk:17 inside Docker 容器

[英]UnsatisfiedLinkError using openjdk:17 inside Docker container

我想 Dockerize 一個 web 應用程序,它在本地工作得很好。 當嘗試在 Docker 中運行應用程序時,從 Nauty 庫調用 function 時會引發 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 庫中的函數。

將應用程序 Docker 化后,調用庫 function 時出現以下錯誤

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"]

任何有關如何解決此問題的指針將不勝感激。 我環顧四周已經有一段時間了,但我似乎無法解決這個問題。

經過數小時的谷歌搜索和調試,問題出在 ENTRYPOINT 中的庫路徑周圍的雙引號。 指定它的正確方法只是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM