Alpine Linux Docker Container con jre-8 non ha Nashorn Engine

Ho un'image FROM anapsix/alpine-java:8_server-jre_unlimited basata su FROM anapsix/alpine-java:8_server-jre_unlimited . Tuttavia, quando provo

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

scriptEngine è null . Ho cercato di get il motore predefinito con:

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

e restituisce anche null , where da quando è java8, la mia comprensione è stata, dovrebbe restituire jdk.nashorn.api.scripting.NashornScriptEngine

È questo perché jre-8 qui è una versione più leggera per Alpine? Devo installare pieno JDK per risolvere questo problema?

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

Il gestore del progetto rimuove esplicitamente il motore di script di Nashorn, vedere la sorgente . Sarebbe opportuno presentare un problema a Github e chiedere al mantenitore che cosa è la ragione.

L'image anapsix/alpine-java non utilizza il pacchetto Java ufficiale di Alpine, ma Oracle JDK (che viene distribuito solo come binario compilato contro glibc) con un hack glibc per renderlo in qualche modo eseguito sul sistema musulare. Non è supportto da Alpine e vi scongiuro di usarla.

Puoi invece utilizzare l'image alpina pianura e installare semplicemente il pacchetto openjdk8, che include Nashorn:

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

Oracle JDK è solo la distribuzione di OpenJDK (ovvero open-source) di marca (proprietaria), la base di codice è quasi identica. Ciò significa che quasi tutte le applicazioni Java che eseguono su Oracle JDK 8 funzionano anche su OpenJDK 8.

Anche se l'installazione di openjdk8 risolverà il problema, questo non è l'approccio giusto. Il vantaggio dell'utilizzo di Alpine è quello di creare un'image minima di size (size), il che significa che ha solo i componenti Java minimi richiesti. Ecco perché l'API di scripting (Nashorn) viene rimosso dall'image. Pertanto, se abbiamo bisogno di funzionalità Java specifiche come API di scripting, dobbiamo passare a una versione completa di JDK senza utilizzare Alpine o creare un'image di base personalizzata simile a Alpine, ma con i componenti di API Scripting (in questo caso).