4
votes

Échec de la construction de Docker "Échec de la copie: aucun fichier source n'a été spécifié"

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 ...


0 commentaires

4 Réponses :


1
votes

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


0 commentaires

3
votes

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.


0 commentaires

0
votes

Vérifiez les fichiers .gitignore et .dockerignore

  1. Supprimez le / target (chemin du fichier source à partir de là que vous copiez).
  2. Enregistrez les modifications.
  3. Exécutez la commande docker build

Remarque: un certain temps, le chemin source est mentionné dans le fichier ignorer et notre commande de construction l'ignore.


0 commentaires

0
votes

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.


0 commentaires