3

我是测试自动化工程师,在大型产品公司工作。公司大型单体项目被分割,部分正在离开云端。作为此类重新设计的一部分,测试自动化项目也应该变得多云。我们基于 groovy、selenium、testng 和 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

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

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

4

1 回答 1

-1

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

幸运的是,maven 映像已预先包含所有复制逻辑,因此您只需将存储库指向:

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

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

另外,供参考访问

于 2017-03-28T14:17:06.227 回答