2
votes

Erreur de build du docker / bin / sh: 1: ./mvnw: introuvable

J'essaie de créer un projet maven à l'aide de dockerfile, mais j'ai cette erreur lorsque j'utilise la commande docker build

# Stage 1 Build the Spring Project into a jar file
FROM openjdk:8-slim as builder
RUN mkdir src
COPY . /src
WORKDIR /src
RUN chmod 700 mvnw && ./mvnw clean install package  ==>error on this line

# Stage 2 Run the jar file from previous build
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
COPY --from=builder /src/target /build
WORKDIR /build
EXPOSE 80
EXPOSE 5001
ENTRYPOINT ["java", "-jar", "tax-0.0.1-SNAPSHOT.jar"]

J'ai essayé cette solution: impossible d'exécuter «./mvnw clean install» lors de la création d'une image docker basée sur «openjdk: 8-jdk-alpine» pour l'application Spring Boot

mais toujours une erreur.

Voici mon fichier docker

/bin/sh: 1: ./mvnw: not found

Est-ce que je manque quelque chose? Je serais heureux de toute aide.


4 commentaires

pourriez-vous essayer comme, "RUN chmod 700 mvnw && mvnw clean install package ==> erreur sur cette ligne" sans "./"


@JMadushan: je l'ai déjà essayé, mais j'ai obtenu / bin / sh: 1: mvnw: introuvable


Je suppose que vous ne copiez pas le wrapper maven (mvnw) sur l'image. vous pouvez lancer "RUN ls" après la ligne "WORKDIR / src" juste pour inspecter cela.


@JMadushan: après avoir ajouté run ls, j'obtiens la liste des fichiers comme ci-dessous, compilateur, Dockerfile, mvnw, mvnw.cmd, pom.xml, src, cible, est-ce que cela signifie quelque chose? désolé je suis débutant dans docker,


3 Réponses :


4
votes

Cela remonte à quelques mois, mais je peux peut-être vous aider.

J'étais confronté au même problème lors de la création d'une image basée sur openjdk: 14-alpine à partir d'une machine Windows 10. Le problème était que localement, le script mvnw avait des fins de ligne Windows ( \r\n appelé CRLF).

J'ai essayé d'appeler le script avec /bin/sh mvnw mais j'aurais encore des problèmes. La première solution était de convertir les fins de ligne en Linux EOL ( \n appelé "LF") à partir de mon IDE.

Une meilleure approche consiste à installer dos2unix et à exécuter dos2unix mvnw juste avant d'appeler le script. Sur Linux Slim (Debian), vous pouvez faire apt-get update && apt-get install dos2unix .

Vous pouvez également essayer chmod +x mvnw pour rendre le script exécutable.

J'espère que cela t'aides!


0 commentaires

1
votes

Absolument, si le fichier a une fin de ligne au format Windows, il ne sera pas analysé comme un fichier Linux, par conséquent, il en résultera un fichier introuvable, pour le résoudre, installez sudo apt-get install dos2unix et exécutez dos2unix mvnw cela convertit le fichier en Type de fin de ligne Linux afin qu'il soit reconnu comme fichier Linux.


0 commentaires

0
votes

Essayez de nettoyer votre fichier mvnw en supprimant les espaces et les caractères CR du fichier, en utilisant:

sed -i 's/\r$//' mvnw

J'ai pu exécuter le script mvn à l'intérieur du conteneur après avoir utilisé cette commande.


0 commentaires