2016-08-21 401 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

相关问题