如何保持由Maven依赖关系所做的更改:在Docker镜像中进行脱机

我是Test Automation工程师,在大型产品公司工作。 公司庞大的整体项目被分割成部分正在变成云。 作为这种重新devise的一部分,testing自动化项目也应该是阴天。 我们的基于常规,selenium,testing和maven的典型的TA项目。 现在我想尝试将整个TA maven项目放到Docker image \ container中。 它的工作很好,但在第一次运行时,它开始下载依赖关系到本地.m2存储库。 我想加快速度,并在创作形象阶段完成这项任务。

这是我的DOCKERFILE:

FROM maven:3.3-jdk-8 LABEL description="Embedded portal-web-testing" MAINTAINER NNN COPY ./settings.xml /root/.m2/ COPY ./acceptance-tests ./acceptance-tests WORKDIR acceptance-tests RUN mvn dependency:go-offline --debug >log RUN ls /root/.m2/ #RUN mvn test ENTRYPOINT ["bash"] 

这里是一个日志:

 Step 1 : FROM maven:3.3-jdk-8 ---> 7addddbdd730 Step 2 : LABEL description "Embedded portal-web-testing" ---> Running in 1d195ccb9c57 ---> f5372b024ca0 Removing intermediate container 1d195ccb9c57 Step 3 : MAINTAINER NNN ---> Running in 03ebbffda680 ---> cb12da3d8ec6 Removing intermediate container 03ebbffda680 Step 4 : COPY ./settings.xml /root/.m2/ ---> 164999e1f63a Removing intermediate container 1e1778d2533b Step 5 : COPY ./acceptance-tests ./acceptance-tests ---> 7d93fff4193e Removing intermediate container a5d04eb30591 Step 6 : WORKDIR acceptance-tests ---> Running in f15111475fc6 ---> beb4d090362b Removing intermediate container f15111475fc6 Step 7 : RUN mvn dependency:go-offline --debug >log ---> Running in 2c09f1869143 ---> 62326c2bb073 Removing intermediate container 2c09f1869143 Step 8 : RUN ls /root/.m2/ ---> Running in 91b602f529da settings.xml ---> b7bc32199ab3 Removing intermediate container 91b602f529da Step 9 : ENTRYPOINT bash ---> Running in 3167f5a6d923 ---> 94b3e0b146da Removing intermediate container 3167f5a6d923 Successfully built 94b3e0b146da 

在第7步肯定文件正在下载,但看起来像没有存储。 以下控制台命令显示在本地.m2文件夹中没有更新:

 root@37f5a0d04232:/acceptance-tests# ls /root/.m2 settings.xml 

如果我尝试从容器内的命令行再次运行相同的命令(当图像被创build并且容器已经启动时):

 root@37f5a0d04232:/acceptance-tests# mvn dependency:go-offline 

大量的下载开始,库文件夹最终出现在.m2下

 root@37f5a0d04232:/acceptance-tests# ls /root/.m2 repository settings.xml 

我很难理解为什么由Dockerbuild文件的maven命令引起的更改没有存储为docker图层。

我使用的是Docker 1.12和Maven 3.3.3

/root/.m2是一个卷,这就是为什么docker容器启动时被清除的原因。 这可以通过将内容caching在自定义目录中,然后在启动容器时将其复制到/root/.m2来避免。

幸运的是,Maven图像是预先与所有的复制逻辑,所以你只需要指出存储库为:

RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve

入口点将负责为您设置本地存储库。 它帮助我希望它也能帮助你。

另外,供参考访问 。