如果我尝试在 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 社区版和带有 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(没有 Gradle)构建 Docker 容器,它就可以工作。
如何让 Gradle(或 Docker?)找到 myproject.jar 文件?
最佳答案
问题是Docker文件中的COPY
命令:
COPY build/libs/myproject.jar myproject.jar
源目录 build/libs/
不是用于构建 Docker 容器的文件所在的位置。相反,目录 build/docker/
用作 Docker 构建上下文。当 COPY
被执行时,这个目录是有效的工作目录。
正确的COPY
命令就这么简单:
COPY myproject.jar /
Docker 任务:
docker {
dependsOn bootJar
name "${project.group}/${jar.baseName}:${version}"
files bootJar.archivePath
}
如果你也想复制资源,需要在files
参数中添加processResources
:
files bootJar.archivePath, processResources
关于java - 使用 Palantir Gradle 插件构建 Docker 容器时找不到 .jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49941955/