小编典典

使用Palantir Gradle插件构建Docker容器时找不到.jar文件

spring-boot

如果我尝试在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)和Java的Gradle 4.7的Docker Community Edition。

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?


阅读 635

收藏
2020-05-30

共1个答案

小编典典

问题是COPYDocker文件中的命令:

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
}

如果也要复制资源,则需要添加processResourcesfiles参数:

files bootJar.archivePath, processResources
2020-05-30