【问题标题】:Docker build strategy with Maven使用 Maven 构建 Docker 策略
【发布时间】:2019-06-11 05:18:59
【问题描述】:

有几种方法可以构建 Openshift,其中之一是 Docker build strategy

我的存储库的根目录中确实有一个 Dockerfile:

FROM maven:3.6.1-jdk-8

...


RUN mvn clean package

...

当我执行时

oc new-build https://github.com/myrepo

成功了,但是:

oc 开始构建 ...

无法在工作目录(即/)中找到pom.xml 文件。

使用

RUN echo `find . pom.xml`

我发现pom.xml 文件找不到了。

我怎样才能让它工作?另外,我的方法正确吗?

【问题讨论】:

  • 您需要在 Dockerfile 中的 RUN 语句之前添加一个 COPY 语句,以使您的项目文件在容器中可用。也许有可用的图像具有更适合 okd 的默认值(不知道)。您正在使用没有很多假设的官方 maven 图像。有很多方法可以使用 docker 或构建容器来运行构建。不可能说你的方法是否正确——我们不知道你想要实现什么。但它看起来也没有错。应该做点什么:)
  • @wemu 我已经用 COPY 指令和 WORKDIR 解决了它。但是我在尝试将生成的 jar 添加到图像时卡住了:找不到文件错误。
  • 你创建的jar文件应该已经在镜像中了。所以添加可能需要一些参数。我认为您所做的是多阶段构建:docs.docker.com/develop/develop-images/multistage-build
  • @wemu 我已经通过使用mvn clean install 而不是mvn clean package 让它工作,然后从.m2 位置复制jar。无论如何,这种方法是错误的,因为整个 .m2 文件夹与 maven 安装一起进入映像。多阶段构建的想法听起来很不错,我会尝试的。顺便说一句,如果您对所有建议做出回答,我会接受。
  • 会的。点就是点:)

标签: maven docker dockerfile openshift openshift-origin


【解决方案1】:

在您的情况下,您需要向 Dockerfile 添加一条 COPY 语句,以便项目文件可用于正在运行的容器内的 maven。然后使用 RUN 语句开始构建。

由于您可能不会在 maven 映像上运行生成的 docker 映像,因此您可以查看 docker multi-stage builds。它允许使用一个图像运行您的构建,并将文件传递到基于不同图像的新图像中。

这是在创建过程中使用 docker build 镜像在 docker 镜像中创建应用程序的常用方法。所以到目前为止一切看起来都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2019-02-06
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多