Ошибка копирования образа сборки Docker: нет такого файла или каталога

#java #docker #jenkins #gradle #micronaut

Вопрос:

мы хотим создать серверную часть на основе платформы micronaut (java) с Дженкинсом и докером.

Локально все работает нормально. Но не через Дженкинса/докера.

Сообщение об ошибке

Во время построения изображения возникает следующая ошибка:

 Step 7/11 : COPY --from=build ./build/layers/libs /home/app/libs
COPY failed: stat /var/lib/docker/overlay2/33b475c0bb868e9d61905995e0bd720a30cfde48e7e28acbb31a8a0d88474e24/merged/build/layers/libs: no such file or directory
 

Докерфайл

 FROM gradle:7.2.0-jdk16 as build
WORKDIR /app
COPY --chown=gradle:gradle . /app
RUN gradle build --no-daemon

FROM openjdk:16-alpine
WORKDIR /home/app
COPY --from=build /app/build/layers/libs /home/app/libs
COPY --from=build /app/build/layers/resources /home/app/resources
COPY --from=build /app/build/layers/application.jar /home/app/application.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/home/app/application.jar"]
 

Фрагмент файла Дженкинса

 stage('Backend: Build Docker image') {
    steps {
        script {
            if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'pipeline') {
                docker.withServer("${dockerServer}") {
                    docker.withRegistry("https://${dockerRegistry}", 'ci-bot-docker') {
                        dir ("backend") {
                            def image = docker.build("${dockerRegistry}/product/${env.BRANCH_NAME}/backend:latest", "-f Dockerfile .")
                            image.push()
                        }
                    }
                }
            }
        }
    }
}
 

Я попытался переместить сборку с помощью gradle из файла Dockerfile в файл Jenkins в качестве отдельного шага. Возникает та же ошибка. Я поискал вокруг и нашел решения, которые также не помогли.

Можете ли вы помочь мне, пожалуйста, исправить это 🙂

бг

Себастьян

Комментарии:

1. Убедитесь, что файлы из сборки находятся там, где вы их ожидаете, добавив RUN ls -R /app/build их после gradle build команды в файле Dockerfile.

2. это не тот же файл Docker: ошибка показывает, COPY --from=build ./build/layers/libs /home/app/libs какой относительный путь указан в файле docker /app//build/layers/libs

Ответ №1:

причиной были неправильные пути.

Правильные пути-это:

 COPY --from=builder /app/build/docker/layers/libs /home/app/libs
COPY --from=builder /app/build/docker/layers/resources /home/app/resources
COPY --from=builder /app/build/docker/layers/application.jar /home/app/application.jar