【问题标题】:Bind .m2 file to docker on build stage在构建阶段将 .m2 文件绑定到 docker
【发布时间】:2019-01-31 14:41:37
【问题描述】:

我尝试根据以下 docker 文件在 docker 容器中构建一个 spring boot 项目。但每次所有 mvn 依赖项都从互联网下载。 构建 docker 文件时如何绑定本地 .m2 文件。

这是我的 Dockerfile

FROM maven:3.5-jdk-8-alpine AS build 
COPY /src /usr/src/javaspring/src
COPY pom.xml /usr/src/javaspring
COPY Dockerfile /usr/src/javaspring
RUN mvn -f /usr/src/javaspring/pom.xml clean install


FROM openjdk:8-jre-alpine
COPY --from=build /usr/src/javaspring/target/javaspring-1.0.jar app.jar
ENTRYPOINT [“java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

【问题讨论】:

  • 在容器运行时应用卷和绑定挂载,而不是在构建 docker 映像时应用
  • @Sathya 是的!但是否可以将我的本地 .m2 挂载到 docker 文件中的 docker run

标签: maven docker spring-boot dockerfile


【解决方案1】:

您应该将项目的内容挂载到 docker 映像中,并将 $HOME/.m2/ 挂载到映像中,而不是将所有内容复制到映像中并构建新映像..

$PWD 是您的pom.xml 文件所在的本地目录,src 目录存在...

docker run -it --rm \
  -v "$PWD":/usr/src/mymaven \ (1)
  -v "$HOME/.m2":/root/.m2 \ (2)
  -v "$PWD/target:/usr/src/mymaven/target" \ (3)
  -w /usr/src/mymaven \ (4)
  maven:3.5-jdk-8-alpine \ (5)
  mvn clean package
  1. 定义pom.xml所在的工作目录的位置。
  2. 定义本地缓存的位置。
  3. 定义目标目录以将其映射到给定路径下的图像中
  4. 定义工作目录。
  5. 定义要使用的图像的名称。

因此,您无需创建新映像即可使用 Maven 构建您的东西。只需通过以下命令运行现有图像:

docker run -it --rm \
  -v "$PWD":/usr/src/mymaven \
  -v "$HOME/.m2":/root/.m2 \
  -v "$PWD/target:/usr/src/mymaven/target" \ 
  -w /usr/src/mymaven \
  maven:3.5-jdk-8-alpine mvn clean package

【讨论】:

  • 谢谢。但是 docker run 命令和我的情况不同。我添加新代码。我想现在你可以理解情况了。当我们使用 docker run 命令时,我们可以挂载文件夹。但是当我们在 docker 文件中使用 run 命令时它就不行了。
  • I add new code 是什么意思..如果你改变自己的项目?...
  • sry 我更改了我的 docker 文件。运行时:-( docker build 。)它每次都会下载所有 maven 依赖项。我可以将我的本地 m2 与 docker build 链接吗
【解决方案2】:

从 Docker Engine 18.09 开始,有一组新的构建增强功能,其中之一是“Cache Mounts”。它不会让你挂载你的本地 .m2 - 它以不同的方式解决了缓存依赖项的需求。要使用它,请在您的 RUN 命令中指定 --mount 选项:

# Dockerfile
FROM maven:3.8.3-jdk-11 AS maven-builder
...
RUN --mount=type=cache,id=m2-cache,sharing=shared,target=/root/.m2  \
  mvn --file /xyz/pom.xml package

更多:https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2020-01-14
    • 2022-12-04
    • 2020-04-07
    • 1970-01-01
    • 2021-12-16
    • 2020-12-05
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多