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.
3 Réponses :
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!
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.
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.
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,