Je suis nouveau dans Docker (mais pas dans le développement).
J'ai ce Dockerfile:
Removing intermediate container 7c66e8b7dbed ---> 74b1c50c84ad Step 5/10 : FROM openjdk:8-jdk-alpine ---> a3562aa0b991 Step 6/10 : RUN addgroup -S spring && adduser -S spring -G spring ---> Running in ca236cf9a705 Removing intermediate container ca236cf9a705 ---> 0c255ef5868f Step 7/10 : USER spring:spring ---> Running in 8452dcff6a8a Removing intermediate container 8452dcff6a8a ---> 6265f412699a Step 8/10 : ARG war_FILE=/home/app/target/*.war ---> Running in 3b54067b2cca Removing intermediate container 3b54067b2cca ---> c186c4a7e443 Step 9/10 : COPY ${war_FILE} app.war COPY failed: no source files were specified
Et (jusqu'ici tout va bien) la construction réussit:
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:51 min [INFO] Finished at: 2020-01-15T08:43:54Z [INFO] ------------------------------------------------------------------------
mais à la fin, la construction du docker échoue:
# # Build stage # FROM maven:3.6.3-jdk-8-slim AS build COPY src /home/app/src COPY pom.xml /home/app RUN mvn -f /home/app/pom.xml clean package # # Package stage # FROM openjdk:8-jdk-alpine RUN addgroup -S spring && adduser -S spring -G spring USER spring:spring ARG war_FILE=/home/app/target/*.war COPY ${war_FILE} app.war ENTRYPOINT ["java","-jar","/app.war"]
Je fais probablement quelque chose d'incroyablement stupide mais je ne sais pas par où commencer à chercher ...
4 Réponses :
Dans votre Dockerfile,
ARG war_FILE=/home/app/target/*.war COPY ${war_FILE} app.war
Pour une raison quelconque, le ${war_FILE}
n'est pas mis à jour. Pouvez-vous vérifier si les fichiers .war
sont présents dans /home/app/target/
après la construction?
Aussi, si war_FILE
est une constante, pourquoi ne pas copier directement les fichiers à partir de cet emplacement? c'est à dire
COPY /home/app/target/*.war app.war
Encore une fois, s'il y a plusieurs fichiers .war
, cela peut être un problème
Sur une construction à plusieurs étages, les données de chaque étape ne sont pas partagées entre les étapes.
Ainsi, en effet, lors de la build
, vous avez réussi à créer le fichier war sous /home/app/target/
.
Cependant, à la deuxième étape, ce chemin n'existe pas, ce qui entraîne l'erreur signalée.
Pour résoudre ce problème, remplacez la deuxième étape par:
FROM openjdk:8-jdk-alpine RUN addgroup -S spring && adduser -S spring -G spring USER spring:spring COPY --from=build /home/app/target/war_name.war app.war ENTRYPOINT ["java","-jar","/app.war"]
Exemple tiré de la documentation officielle.
Vérifiez les fichiers .gitignore et .dockerignore
Remarque: un certain temps, le chemin source est mentionné dans le fichier ignorer et notre commande de construction l'ignore.
J'ai rencontré le même problème et résolu mon problème en m'assurant que le nom de fichier et les répertoires étaient correctement orthographiés et correspondaient à la casse. Les noms de fichiers et les répertoires sont sensibles à la casse et vous rencontrerez probablement l'erreur décrite ci-dessus s'ils ne correspondent pas, y compris la casse.