【问题标题】:How to persist changes made by maven dependency:go-offline in docker image如何持久化 maven 依赖项所做的更改:在 docker 映像中脱机
【发布时间】:2017-02-16 06:45:57
【问题描述】:

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

【问题讨论】:

    标签: docker maven-3 testautomationfx


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2023-03-14
      • 2019-08-09
      • 1970-01-01
      • 2021-05-25
      • 2019-08-19
      • 2019-03-24
      • 2019-05-10
      • 2017-03-20
      相关资源
      最近更新 更多