studoverse/campus-qr

Help with Docker (creating image that compiles src code by itself)

Closed this issue · 11 comments

Hi,

I am trying to create a docker image, that doesn't need the Server.jar ready and compiled.

But it breaks at the following place.
Hope somebody can help. Maybe out of this is an official docker container made.
Thanks in advance.

docker build output (not all, just a bit above the error beginning)
> Task :rootPackageJson
There are multiple versions of "kotlinx-serialization-kotlinx-serialization-json-js-legacy" used in nodejs build: 1.2.2, 1.3.0. Only latest version will be used.
There are multiple versions of "kotlinx-serialization-kotlinx-serialization-core-js-legacy" used in nodejs build: 1.2.2, 1.3.0. Only latest version will be used.

> Task :moderatorFrontend:restoreYarnLock
> Task :kotlinNpmInstall FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':kotlinNpmInstall'.
> A problem occurred starting process 'command '/home/ktor/.gradle/nodejs/node-v14.17.0-linux-x64/bin/node''

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':kotlinNpmInstall'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:72)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:187)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:180)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:39)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:44)
        at org.gradle.execution.DefaultBuildWorkExecutor.access$000(DefaultBuildWorkExecutor.java:26)
        at org.gradle.execution.DefaultBuildWorkExecutor$1.proceed(DefaultBuildWorkExecutor.java:52)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:44)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:36)
        at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:51)
        at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:42)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:39)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$executeTasks$3(DefaultBuildLifecycleController.java:136)
        at org.gradle.internal.build.StateTransitionController.doTransition(StateTransitionController.java:243)
        at org.gradle.internal.build.StateTransitionController.tryTransition(StateTransitionController.java:158)
        at org.gradle.internal.build.DefaultBuildLifecycleController.executeTasks(DefaultBuildLifecycleController.java:136)
        at org.gradle.internal.buildtree.DefaultBuildTreeWorkExecutor.execute(DefaultBuildTreeWorkExecutor.java:35)
        at org.gradle.internal.buildtree.BuildOperationFiringBuildTreeWorkExecutor$1.call(BuildOperationFiringBuildTreeWorkExecutor.java:40)
        at org.gradle.internal.buildtree.BuildOperationFiringBuildTreeWorkExecutor$1.call(BuildOperationFiringBuildTreeWorkExecutor.java:37)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.buildtree.BuildOperationFiringBuildTreeWorkExecutor.execute(BuildOperationFiringBuildTreeWorkExecutor.java:37)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doScheduleAndRunTasks$2(DefaultBuildTreeLifecycleController.java:87)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewTaskGraph(DefaultIncludedBuildTaskGraph.java:94)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doScheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:85)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:103)
        at org.gradle.internal.build.StateTransitionController.lambda$transition$0(StateTransitionController.java:145)
        at org.gradle.internal.build.StateTransitionController.doTransition(StateTransitionController.java:243)
        at org.gradle.internal.build.StateTransitionController.transition(StateTransitionController.java:145)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:100)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:66)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
        at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:114)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:155)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
        at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:38)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:211)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:38)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
        at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
        at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
        at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/home/ktor/.gradle/nodejs/node-v14.17.0-linux-x64/bin/node''
        at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:241)
        at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:218)
        at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:369)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:87)
        at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: net.rubygrapefruit.platform.NativeException: Could not start '/home/ktor/.gradle/nodejs/node-v14.17.0-linux-x64/bin/node'
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
        at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
        at org.gradle.process.internal.ExecHandleRunner.startProcess(ExecHandleRunner.java:98)
        at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:71)
        ... 4 more
Caused by: java.io.IOException: Cannot run program "/home/ktor/.gradle/nodejs/node-v14.17.0-linux-x64/bin/node" (in directory "/src-code/build/js"): error=2, No such file or directory
        at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
        ... 7 more
Caused by: java.io.IOException: error=2, No such file or directory
        ... 8 more


* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2m 55s
13 actionable tasks: 13 executed
The command '/bin/sh -c ./gradlew stage --stacktrace' returned a non-zero code: 1
ERROR: Service 'campus-qr' failed to build : Build failed

My Dockerfile looks like this (has --stacktrace for debug on). Next to the Dockerfile inside campus-qr is this repo cloned.
As you can see I replaced jre-alpine with jdk-alpine as it gave me other errors before (and jre doesn't have the compiling that jdk has, as I read).

FROM openjdk:8-jdk-alpine
#jre-alpine

ENV APPLICATION_USER ktor
RUN echo  $APPLICATION_USER
RUN adduser -D -g '' $APPLICATION_USER

RUN mkdir /app
RUN chown -R $APPLICATION_USER /app

RUN mkdir /src-code
COPY campus-qr /src-code
RUN chown -R $APPLICATION_USER /src-code


USER $APPLICATION_USER

WORKDIR /src-code
RUN ./gradlew stage --stacktrace

COPY Server.jar /app/Server.jar
WORKDIR /app

CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "Server.jar"]

Hi, can you run ./gradlew stage manually?

Hi, can you run ./gradlew stage manually?

Do you mean inside the docker container or on the host?

Both :)

Both :)

@vonox7 With which openjdk version should I install it?
openjdk:8-jdk-alpine right or which java version does it have to be?
How do you build the jar, x86, which java version, etc? I didn't see any instructions other than ./gradlew stage.

@vonox7 Ok, it finished building with docker container openjdk (without a tag), don't know which openjdk version this is.
The 8-jdk-alpine tag is 3 years old, is campus-qr dependent on such an old version? The newest version is 18 for alpine or 19 for debian buster builds.

Also the alpine builds are not officially supported:
https://github.com/docker-library/docs/blob/master/openjdk/README.md#openjdkversion-alpine

quote:

What this means is that Alpine based images are only released for early access release versions of OpenJDK. Once a particular release becomes a "General-Availability" release, the Alpine version is dropped from the "Supported Tags"; they are still available to pull, but will no longer be updated.

So it would be better to switch to an official build. Will try.

Ok, I found out they are image tags 8-jdk and 8-jre if version 8 is needed, as it is. Images are still updated.

8-jdk is building it sucessfully, the current Dockerfile seems to work (except I need probably need to change the jdk version)

Dockerfile:

FROM openjdk:8-jdk

ENV APPLICATION_USER ktor
RUN echo  $APPLICATION_USER
RUN adduser --disabled-password --gecos '' $APPLICATION_USER

RUN mkdir /app
RUN chown -R $APPLICATION_USER /app

RUN git clone https://github.com/studo-app/campus-qr.git /src-code

RUN chown -R $APPLICATION_USER /src-code

USER $APPLICATION_USER

WORKDIR /src-code
RUN ./gradlew stage --stacktrace

RUN cp Server.jar /app/Server.jar
WORKDIR /app

CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "Server.jar"]

docker log output at startup
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr    | OpenJDK 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)
campus-qr    | Error: A JNI error has occurred, please check your installation and try again
campus-qr    | Exception in thread "main" java.lang.UnsupportedClassVersionError: com/studo/campusqr/ServerKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
campus-qr    |  at java.lang.ClassLoader.defineClass1(Native Method)
campus-qr    |  at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
campus-qr    |  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
campus-qr    |  at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
campus-qr    |  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
campus-qr    |  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
campus-qr    |  at java.security.AccessController.doPrivileged(Native Method)
campus-qr    |  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
campus-qr    |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
campus-qr    |  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
campus-qr    |  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
campus-qr exited with code 1

Maybe somebody does know how to solve this.
If we get it to work, campus-qr could get an official docker build published.

I got the memory limit warning out of the way by eliminating the "-XX:+UseCGroupMemoryLimitForHeap", after that I changed it just to CMD ["java", "-jar", "Server.jar"] and changed to openjdk:11-jdk (debian based).
It seems to compile and start sucessfully until it breaks because of mongodb not existing.

Seems to work now, can login, I changed the variables under configurations in via mongo-express.
I can also post the complete docker-compose.yml file (removing my special stuff).
Maybe these default values or so could also be changed via ENVIRONMENT variables, same with ldap.

@functionaldude seems like the Dockerfile is outdated due to mostly using Heroku/Scalingo buildfiles instead. Can you please check/update this?

Created a pull request #113

Resolved via #113