2016-08-21 94 views
1

我有一個基於FROM anapsix/alpine-java:8_server-jre_unlimited的碼頭圖像。然而,當我嘗試帶jre-8的高山Linux Docker容器沒有Nashorn引擎

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); 

scriptEnginenull。我試圖讓使用默認引擎:

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js"); 

,並返回null還有,那裏的,因爲它是java8,我的理解是,它應該返回jdk.nashorn.api.scripting.NashornScriptEngine

這是因爲JRE-8在這裏阿爾派的打火機版本?我應該安裝完整的JDK來解決這個問題嗎?

參考:http://blog.takipi.com/lean-mean-java-virtual-machine-making-your-docker-7x-lighter-with-alpine-linux/

+0

官方'java:8-jre'和'java:8-jre-alpine'圖片都有'NashornScriptEngine',所以我沒有理由使用第三方替代方法。如果您出於某種原因需要它,請諮詢維護人員。 –

回答

0

雖然安裝openjdk8可以解決問題,但這不是正確的方法。使用Alpine的好處是創建一個最小的(大小)碼頭圖像,這意味着它只有最少的Java組件。這就是爲什麼Scripting API(Nashorn)已從圖像中刪除的原因。因此,如果我們需要特定的Java功能(如Scripting API),則不必使用Alpine就可以切換到完整的JDK版本,或者創建類似於Alpine的自定義基本映像,但使用Scripting API組件(對於這種情況)。

2

The project維護者顯式刪除犀牛腳本引擎,看到the source。在Github上提出問題並向維護者詢問是什麼原因是有意義的。

1

圖片anapsix/alpine-java沒有使用Alpine的官方Java包,而是Oracle的JDK(它只是作爲一個針對glibc編譯的二進制文件分發)與glibc hack,使它以某種方式在基於musl的系統上運行。這是而不是支持阿爾卑斯,我強烈勸阻你使用它。

可以代替使用純高山圖像並簡單地安裝openjdk8包,其包括犀牛:OpenJDK的(即開源),代碼庫的

echo "http://dl-cdn.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories 
apk update 
apk add openjdk8 

甲骨文JDK僅烙(專有的)分佈幾乎完全相同。這意味着幾乎所有在Oracle JDK 8上運行的Java應用程序也可以在OpenJDK 8上運行。

+0

是否有理由建議構建自己的圖像與從[Docker註冊表](https://hub.docker.com/_/openjdk/)重用現有'openjdk:8-alpine'? –

+0

@AlexanderAzarov我不知道,我不使用Docker。你鏈接的圖片使用了Alpine的openjdk8包,所以它也應該沒問題。 –

+0

我暫時通過安裝openjdk8解決了這個問題 – maheeka