2016-08-21 10 views
1

У меня есть изображение докеры на основе FROM anapsix/alpine-java:8_server-jre_unlimited. Однако, когда я пытаюсьAlpine Linux Docker Container с jre-8 не имеет Nashorn Engine

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

scriptEngine является null. Я пытался получить двигатель по умолчанию с:

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

и возвращает null, а также, где, как, так как это java8, мое понимание было, он должен вернуть jdk.nashorn.api.scripting.NashornScriptEngine

Является ли это потому, что JRE-8 здесь более легкая версия для Alpine? Должен ли я установить полный 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. Вот почему API-интерфейс Scripting API (Nashorn) удаляется из образа. Поэтому, если нам нужны конкретные Java-функции, такие как API Scripting API, мы должны перейти на полную версию JDK без использования Alpine или создать собственное базовое изображение, подобное альпийскому, но с компонентами API Scripting (для этого случая).

2

The project Сопровождающий явно удаляет Nashorn сценарий двигателя, см the source. Было бы разумно подать вопрос в Github и спросить у сопровождающего, в чем причина.

1

Изображение anapsix/alpine-java не использует официальный пакет Java для Java, но Oracle JDK (который распространяется только как двоичный файл, скомпилированный против glibc) с помощью glibc-хака, чтобы заставить его каким-то образом работать на мульсовой системе. Это не, поддерживаемый Alpine, и я сильно не рекомендую вам использовать его.

Вы можете использовать вместо обычного Alpine изображения и просто установить openjdk8 пакет, который включает в себя Насхорн:

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

Oracle JDK только фирменный (собственность) распределение OpenJDK (то есть с открытым исходным кодом), код базы почти идентична. Это означает, что почти все приложения Java, работающие на Oracle JDK 8, также работают на OpenJDK 8.

+0

Есть ли причина, по которой вы рекомендуете создавать собственное изображение или повторно использовать существующий 'openjdk: 8-alpine' из [Docker registry] (https://hub.docker.com/_/openjdk/)? –

+0

@ Александр Азаров Я не знаю, я не пользуюсь Докером. Образ, который вы связали, использует пакет openjdk8 от Alpine, так что это тоже должно быть хорошо. –

+0

Я временно решил проблему, установив openjdk8 – maheeka