Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dockerfile com Java 11

Olá, o meu projeto foi buildado com o Java 11, entretanto quando troco a imagem para versões correspondentes a essa versão (como adoptopenjdk/openjdk11:latest RUN ou openjdk:11-jre-slim por exemplo) o erro abaixo é retornado:

FROM adoptopenjdk/openjdk11:latest 
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
The command '/bin/sh -c addgroup -S spring && adduser -S spring -G spring' returned a non-zero code: 1

Minha pergunta é: Seria possível continuar usando o Java 11, apenas adicionando/alterando alguma outra informação no Dockerfile? Também já baixei o Java 8 e alterei para ele nas configurações do projeto no Eclipse, mas nesse caso é retornado outro erro:

Exception in thread "main" java.lang.UnsupportedClassVersionError: br/com/alura/forum/ForumApplication 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
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Agradeço qualquer ajuda ou sugestão.

4 respostas

Na verdade você já está usando o JDK11 no seu dockerfile, teríamos que ver qual é o erro (em detalhes) do porquê estar retornando erro ao rodar o comando "/bin/sh -c addgroup -S spring && adduser -S spring -G spring". Tenta fazer o processo manual: roda um container com a imagem "adoptopenjdk/openjdk11:latest" e depois roda o comanndo "addgroup -S spring && adduser -S spring -G spring" dentro do container, deve dar uma mensagem de erro com mais detalhes

Oi, Otávio

Segue o erro completo:

Step 1/6 : FROM adoptopenjdk/openjdk11:latest
 ---> 2ceef4d6c617
Step 2/6 : RUN addgroup -S spring && adduser -S spring -G spring
 ---> Running in eb8dd938e60d
Option s is ambiguous (shell, system)
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER
   Add a normal user

adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER
   Add a system user

adduser --group [--gid ID] GROUP
addgroup [--gid ID] GROUP
   Add a user group

addgroup --system [--gid ID] GROUP
   Add a system group

adduser USER GROUP
   Add an existing user to an existing group

general options:
  --quiet | -q      don't give process information to stdout
  --force-badname   allow usernames which do not match the
                    NAME_REGEX[_SYSTEM] configuration variable
  --extrausers      uses extra users as the database
  --help | -h       usage message
  --version | -v    version number and copyright
  --conf | -c FILE  use FILE as configuration file

The command '/bin/sh -c addgroup -S spring && adduser -S spring -G spring' returned a non-zero code: 1
solução!
Option s is ambiguous (shell, system)

O problema é que você está usando uma imagem Ubuntu e a opção -S está ambígua

troca a imagem para alpine ao invés de latest:

FROM adoptopenjdk/openjdk11:alpine

Otávio, muito obrigado! Trocar para alpine corrigiu o problema.

FROM adoptopenjdk/openjdk11:alpine