如何保持maven依赖所做的更改:在docker镜像中脱机

时间:2016-10-07 09:50:43

标签: docker maven-3 testautomationfx

我是测试自动化工程师,在大型产品公司工作。公司大型整体项目正在划分,部分正在分道扬云。作为此类重新设计的一部分,测试自动化项目也应该变得多云。我们的典型TA项目基于groovy,selenium,testng和maven。现在我想尝试将整个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

如果我尝试从容器内的命令行再次运行相同的命令(当创建映像并启动容器时):

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

1 个答案:

答案 0 :(得分:-1)

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

幸运的是,maven图像是使用所有复制逻辑预先烘焙的,因此您只需将存储库指向:

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

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

另外,参考visit