我是测试自动化工程师,在大型产品公司工作。公司大型整体项目正在划分,部分正在分道扬云。作为此类重新设计的一部分,测试自动化项目也应该变得多云。我们的典型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
答案 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。