1
resposta

No main manifest attribute

Boa tarde a todos

Preciso de uma ajuda sobre o capitulo de docker.

Eu consigo rodar a aplicação pelo botão run do intellij e pelo mvn spring-boot:run, a aplicação funciona perfeitamente, porém quando gerei a imagem e rodei o container com o comando :

docker run -p 3080:8080 forum 

Ele apresentou essa mensagem: "No main manifest attribute".

Segue meu dockerfile

FROM chainguard/jdk-lts
EXPOSE 8080
ADD /target/forum-0.0.1-SNAPSHOT.jar.original forum.jar
ENTRYPOINT ["java", "-jar", "forum.jar"]

Procurando pelos stack overflow vi comentarios que precisaria criar o arquivo manifest.mf dentro de target/classese/meta-inf, fiz na mão, porém não funcionou no docker.Não sei se o maven deveria gerar automaticamente esse arquivo.

Obs. O dockerfile está com o jdk 21 porque é o mesmo que uso local.

1 resposta

Olá, Douglas! Tudo bem?

Aparentemente o problema está relacionado com a criação do arquivo JAR. A mensagem "No main manifest attribute" geralmente ocorre quando o arquivo JAR não consegue encontrar a classe principal para iniciar a aplicação.

No seu caso, o arquivo JAR que você está tentando executar é o forum-0.0.1-SNAPSHOT.jar.original, que provavelmente não possui a classe principal definida no seu manifest.

Para resolver isso, você pode tentar configurar o plugin maven-jar-plugin no seu arquivo pom.xml para definir a classe principal. Segue um exemplo de como você pode fazer isso:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.exemplo.MinhaClassePrincipal</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Substitua com.exemplo.MinhaClassePrincipal pelo caminho completo da sua classe principal.

Depois disso, você pode tentar gerar o JAR novamente e criar a imagem Docker. Lembre-se de atualizar o nome do arquivo JAR no seu Dockerfile.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software