缓存基于Maven的Docker构建的Jar依赖项

Mic*_*RON 8 dependencies maven docker dockerfile

我正在从这个Dockerfile构建一个Docker镜像:

FROM maven:3.3.3-jdk-8
MAINTAINER Mickael BARON  

ADD pom.xml /work/pom.xml
WORKDIR /work
RUN mvn dependency:go-offline --fail-never

ADD ["src", "/work/src"]
RUN ["mvn", "package"]
Run Code Online (Sandbox Code Playgroud)

使用这个Dockerfile,我强制在打包Java项目之前下载依赖项.因此,每次我从src目录更改文件时,我都不必重新下载依赖项.

但是,有一个问题,这个问题取决于Maven的版本(基本图像).实际上,下载了依赖项,但它们不会持久保存到容器的〜/ .m2目录中.它是空的.因此,当我更改一些源文件时,所有依赖项都被重载.

但是,我注意到如果我从基本图像(例如FROM maven:3.2.5-jdk-8)更改Maven的版本,它可以工作.

很奇怪,不是吗?

sir*_*rom 1

恐怕是因为VOLUME他们添加了这条指令:

https://github.com/carlossg/docker-maven/blame/8ab542b907e69c5269942bcc0915d8dffcc7e9fa/jdk-8/Dockerfile#L11

它会创建/root/.m2一个卷,因此构建步骤对该文件夹所做的任何更改都不会影响到以下构建容器。