我的spring-boot应用程序最初是用maven构建的,但我正在尝试使用它。我的构建过程的一部分是使用dockerfile-maven插件制作一个docker镜像。最接受的gradle等价似乎是com.palantir.docker,所以我正在使用它(至少根据this tutorial from pivotal。)
我的设置非常简单。我的dockerfile接受一个构建参数,这是最后一个jar,并将其添加到图像中。
FROM openjdk:8-jdk-alpine
MAINTAINER github.com/paul-nelson-baker
EXPOSE 5005 8080 35729
ENTRYPOINT ["java", "-Xdebug", "-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n", "-jar", "/var/paulbaker/pauls-blog.jar"]
ARG JAR_FILE
ADD ${JAR_FILE} "/var/paulbaker/pauls-blog.jar"
让我感到困惑的部分是gradle设置。我传递的构建arg看起来是正确的:
docker {
name = "paulbaker.io/my-blog"
tags 'latest'
dockerfile file('src/main/docker/Dockerfile')
files "${project.name}-${version}.jar"
buildArgs([JAR_FILE: "${project.name}-${version}.jar"])
}
但是每当我尝试构建映像时,即使实际的java构建成功,我也会收到以下错误:
$ gradle build docker
> Task :docker FAILED
ADD failed: stat /var/lib/docker/tmp/docker-builder952857277/pauls-blog-0.0.1-SNAPSHOT.jar: no such file or directory
我尝试了无数组合来尝试指定./build/libs/pauls-blog-0.0.1-SNAPSHOT.jar
的路径(相对于我的项目),我可以看到它存在,而上面的打印目录却没有。
显然我不了解gradle构建,有人可以清楚如何获取最终的jar文件吗?
答案 0 :(得分:1)
以下错误:
> Task :docker FAILED
ADD failed: stat /var/lib/docker/tmp/docker-builder952857277/pauls-blog-0.0.1-SNAPSHOT.jar: no such file or directory
当Palantir Docker插件找不到使用docker.files属性指定的文件时,会发生当前上下文目录。
在您的问题中,插件正在项目的根目录中搜索jar文件(可能是您的build.gradle所在的位置)并且因为没有在那里生成jar文件而失败。当您指定jar.archivePath时,您指定了jar文件路径的完整位置,现在显然可以找到它。
答案 1 :(得分:0)
我已经解决了这个问题,但我不知道为什么会有这个问题,所以我打开了这个问题所以有人有机会详细解释为什么会这样
正确的值应引用jar.archivePath
。
所以最终结果如下:
docker {
name = "paulbaker.io/my-blog"
tags 'latest'
dockerfile file('src/main/docker/Dockerfile')
files jar.archivePath
buildArgs([JAR_FILE: "${jar.archiveName}"])
}
答案 2 :(得分:0)
files
的参数已添加到docker任务的gradle CopySpec中。
因此files jar.archivePath
将创建jar构建工件的路径添加到此 CopySpec 。
处理完 Dockerfile 后,jar.archiveName
将插入到ADD
模板中,并且因为您的jar.archivePath
在 CopySpec docker构建上下文,它会在 CopySpec 中找到jar.archiveName
,并将文件复制到ADD
的目的地。
这是我在自己的测试中看到的内容。