[英]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.