gpt4 book ai didi

docker - 无法在 docker 镜像中缓存 maven 依赖项

转载 作者:行者123 更新时间:2023-12-02 21:32:29 25 4
gpt4 key购买 nike

我正在使用包含所有 maven 配置、 key 、maven 命令的 sh 文件。当我运行容器时,它每次都会一次又一次地下载依赖项,它无法缓存依赖项。
这是我的 Dockerfile 的样子:

#MVN as build tool
FROM docker.hub.com/maven:3.5.3-jdk-8

#Settings.xml for downloading dependencies from nexus repository
ARG MVN_SETTINGS=settings.xml

#Maven project pom
ARG MVN_POM=pom.xml

#Defining the current working repository
WORKDIR /usr/src/app


#Coping the settings.xml into working directory
COPY ${MVN_SETTINGS} settings.xml

#Coping the pom.xml into working directory
COPY ${MVN_POM} pom.xml

#Download the package and make it cached in docker image
RUN mvn -B -f ./pom.xml -s settings.xml dependency:resolve-plugins dependency:resolve


#Coping the source code into working repository
COPY src .

COPY Test.sh .

#Execute permission
RUN chmod a+x Test.sh

#Entry point for docker container
CMD ./Test.sh
这是 Test.sh 文件
#!bin/bash
mvn test -DtestSuite=src/test/resources/suites/Suite.xml
当我创建 docker 镜像并运行容器时,它会一次又一次地下载依赖项,每次运行它。

最佳答案

你想要的东西是不可能的——至少使用“常规” Docker 和 Dockerfile——见这个 question解释一下。
但是,您可以使用 experimental Dockefile syntax 来实现所需的效果。至enable caching对于 RUN陈述:

# syntax = docker/dockerfile:1.0-experimental
FROM docker.hub.com/maven:3.5.3-jdk-8

ARG MVN_SETTINGS=settings.xml
ARG MVN_POM=pom.xml

WORKDIR /usr/src/app

COPY ${MVN_SETTINGS} settings.xml
COPY ${MVN_POM} pom.xml
RUN --mount=type=cache,target=/root/.m2 mvn -B -f ./pom.xml -s settings.xml dependency:resolve-plugins dependency:resolve

COPY src .
COPY Test.sh .
RUN chmod a+x Test.sh
CMD ./Test.sh
上面的 Dockerfile 将启用缓存 /root/.m2目录。该命令仍将每次运行,但不会重新下载依赖项。也就是说,这个 Dockerfile 不适用于“常规”Docker。它需要 BuildKit .
我还建议使用 BuildX plugin并使用 docker buildx build 构建图像允许在构建引擎之间轻松切换,而无需设置和取消设置环境变量。

关于docker - 无法在 docker 镜像中缓存 maven 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64115576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com