I'm trying to Dockerize my (otherwise running nice) very small akka-http webapp. I'm using the buildfile indicated here. For convenience added:
FROM alpine:latest as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
# build minimal JRE
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink \
--verbose \
--add-modules \
java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument \
--compress 2 --strip-debug --no-header-files --no-man-pages \
--release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE" \
--output "$JAVA_MINIMAL"
FROM alpine:latest
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY build/libs/application.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
However it fails to start with error below. Because I'm using a minimalistic setup for jre11 I think I might be missing some modules. But I'm not sure, and I don't know which java modules are mandatory for an akka-http scala-12 application. Hopefully somebody knows??
Exception in thread "main" java.lang.ExceptionInInitializerError
at akka.dispatch.AbstractNodeQueue.<clinit>(AbstractNodeQueue.java:181)
at akka.actor.LightArrayRevolverScheduler.<init>(LightArrayRevolverScheduler.scala:157)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at akka.actor.ReflectiveDynamicAccess.$anonfun$createInstanceFor$1(ReflectiveDynamicAccess.scala:33)
at scala.util.Try$.apply(Try.scala:209)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:28)
at akka.actor.ReflectiveDynamicAccess.$anonfun$createInstanceFor$5(ReflectiveDynamicAccess.scala:39)
at scala.util.Success.flatMap(Try.scala:247)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:39)
at akka.actor.ActorSystemImpl.createScheduler(ActorSystem.scala:925)
at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:786)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:246)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:289)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:234)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:225)
at nl.d8r.stretchsketch.WebServer$.main(Server.scala:37)
at nl.d8r.stretchsketch.WebServer.main(Server.scala)
Caused by: java.lang.ExceptionInInitializerError
at akka.util.Unsafe.<clinit>(Unsafe.java:42)
at akka.dispatch.AbstractNodeQueue.<clinit>(AbstractNodeQueue.java:179)
... 19 more
Caused by: java.lang.NoClassDefFoundError: sun/misc/Unsafe
at akka.util.Unsafe.<clinit>(Unsafe.java:22)
... 20 more
Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 21 more