如果我尝试在Windows 10下使用Spring Boot应用程序构建Docker容器,则会出现以下错误:
> Task :docker FAILED
COPY failed: stat /var/lib/docker/tmp/docker-builder711841135/myproject.jar: no such file or directory
我在版本18.03.0-ce-win59(16762)中使用Docker Community Edition,在Java 8中使用Gradle 4.7 .
build.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 (顶级项目目录中build.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.jar文件?
4 回答
它适用于
docker
任务的以下配置:使用这个略有不同的docker文件:
这似乎与palantir/gradle-docker issue 76一致,它指定:
COPY
应该是build/docker/libs/myproject.jar
,或build/
本身不包括在内 .该问题提到了一个可能的解决方法,重写了另一个泊坞步骤 -
dockerPrepare
- 明确地准备'build/docker
'文件夹 .问题是Docker文件中的
COPY
命令:源目录
build/libs/
不是构建Docker容器的文件所在的位置 . 而是将目录build/docker/
用作Docker构建上下文 . 执行COPY
时,此目录是有效的工作目录 .正确的
COPY
命令就像这样简单:Docker任务:
如果您也想复制资源,则需要将
processResources
添加到files
参数:你的gradle“destinationDir”是什么?
生成的jar将在destinationDir / archiveName中 . 也许是target / myproject.jar
所以你应该把:
如果它不起作用,请添加您的gradle: