.файл jar не найден при создании контейнера Docker с подключаемым модулем Palantir Gradle
Если я попытаюсь создать контейнер Docker с приложением Spring Boot под Windows 10, я получу следующую ошибку:
> Task :docker FAILED
COPY failed: stat /var/lib/docker/tmp/docker-builder711841135/myproject.jar: no such file or directory
Я использую Docker Community Edition в версии 18.03.0-ce-win59 (16762) и Gradle 4.7 с Java 8.
построить.Gradle в (укороченный):
plugins {
id 'java'
id 'org.springframework.boot' version '2.0.1.RELEASE'
id "com.palantir.docker" version "0.19.2"
}
version = '2.0.0'
sourceCompatibility = 1.8
group = "com.example"
repositories {
mavenCentral()
}
bootJar {
archiveName 'myproject.jar'
}
dependencies {
...
}
docker {
dependsOn(build)
name "${project.group}/${jar.baseName}"
files bootJar
}
Dockerfile (брат сборки.gradle в каталоге проекта верхнего уровня):
FROM openjdk:8-jre
COPY build/libs/myproject.jar myproject.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/myproject.jar"]
Если я создам контейнер Docker с Docker только (без Gradle) он работает.
как я могу позволить Gradle (или Docker?) найти файл myproject.банку?
4 ответов
он работает со следующей конфигурацией docker
задачи:
docker {
dependsOn build
name "${project.group}/${jar.baseName}"
files bootJar.archivePath
buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}
используя этот немного другой файл docker:
FROM openjdk:8-jre
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
это, кажется, согласуется с palantir / gradle-docker issue 76 на котором указаны:
Я настроил новый проект в соответствии с примерами, что я наблюдаю, это весь проект (за вычетом
build/
) копируется вbuild/docker
. I вызывает ненужный большой контекст сборки docker.
или COPY
должно быть build/docker/libs/myproject.jar
или build/
сам по себе не включен вообще.
вопрос возможного обходной путь переопределение другого шага docker -dockerPrepare
- подготовка ' однозначно.
мне нужен только один fatJar в дополнение к Dockerfile:
task dockerCopy(type: MoveTo, dependsOn: dockerPrepare) {
from('build/packed') {
include "${jarFullName}"
}
into 'build/docker'
}
проблема COPY
команда в файле Docker:
COPY build/libs/myproject.jar myproject.jar
исходный каталог build/libs/
не там, где находятся файлы для создания контейнера Docker. Вместо этого каталог build/docker/
используется в качестве контекста сборки Docker. Когда COPY
выполняется этот каталог является эффективным рабочим каталогом.
правильный COPY
команда так же проста, как это:
COPY myproject.jar /
задач "Докер":
docker {
dependsOn bootJar
name "${project.group}/${jar.baseName}:${version}"
files bootJar.archivePath
}
если вы хотите скопировать ресурсы тоже нужно добавить processResources
до
Что такое ваш gradle "destinationDir"?
сгенерированный jar будет находиться в destinationDir / archiveName. Возможно, target / myproject.Джар
поэтому вы должны поставить:
COPY target/myproject.jar myproject.jar
если он не работает, добавьте в свой gradle:
destinationDir target