我有一个基于FROM anapsix/alpine-java:8_server-jre_unlimited的码头形象。但是,当我尝试
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");scriptEngine是null。我试图通过以下方式获得默认引擎:
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/
发布于 2016-08-21 19:25:49
虽然安装openjdk8可以解决问题,但这不是正确的方法。使用阿尔卑斯的优点是创建一个最小的(大小)对接映像,这意味着它只有最低限度所需的Java组件。这就是为什么脚本API (Nashorn)被从图像中删除的原因。因此,如果我们需要特定的Java功能(比如脚本API ),我们必须切换到一个完整的JDK版本,而不需要使用Alpine,或者创建一个类似于Alpine的定制基础映像,但是使用脚本API组件(在本例中)。
发布于 2016-08-21 15:14:26
Image并不使用阿尔卑斯的官方anapsix/alpine-java包,但是Oracle (仅作为针对glibc编译的二进制文件)使用了glibc黑客,使其能够在基于musl的系统上运行。它没有得到阿尔卑斯山的支持,我强烈劝阻你不要使用它。
您可以使用普通的阿尔卑斯映像,只需安装openjdk8包,其中包括Nashorn:
echo "http://dl-cdn.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories
apk update
apk add openjdk8Oracle只是OpenJDK (即开源)的(专有)发行版,代码库几乎是相同的。这意味着几乎所有运行在Oracle 8上的Java应用程序都运行在OpenJDK 8上。
https://stackoverflow.com/questions/39060933
复制相似问题