Docker сборка не удалась "COPY fail: исходные файлы не указаны" - PullRequest
2 голосов
/ 15 января 2020

Я новичок в Docker (но не в разработке).

У меня есть этот Dockerfile:

    #
    # 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"]

И (пока все хорошо) сборка завершается успешно:

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:51 min
    [INFO] Finished at: 2020-01-15T08:43:54Z
    [INFO] ------------------------------------------------------------------------

но в итоге сборка docker не удалась:

    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

Возможно, я делаю что-то невероятно глупое, но я не знаю, с чего начать искать ...

Ответы [ 2 ]

2 голосов
/ 15 января 2020

В многоступенчатой ​​сборке данные каждого этапа не распределяются между между этапами.

Таким образом, действительно, на этапе build вы успешно создали файл войны в /home/app/target/.

Однако на втором этапе этот путь не существует, что приводит к сообщаемой ошибке.

Для решения этой проблемы замените второй этап на:

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"]

Пример из официальных документов.

1 голос
/ 15 января 2020

В вашем Dockerfile

ARG war_FILE=/home/app/target/*.war
COPY ${war_FILE} app.war

По какой-то причине ${war_FILE} не обновляется. Можете ли вы проверить, присутствуют ли .war файлы в /home/app/target/ после сборки?

Кроме того, если war_FILE является константой, почему бы не напрямую скопировать файлы из этого места? т.е.

COPY /home/app/target/*.war app.war

Опять же, если будет несколько файлов .war, это может быть проблемой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...