Maven 在构建阶段将.m2文件绑定到docker

Maven 在构建阶段将.m2文件绑定到docker,maven,docker,spring-boot,dockerfile,Maven,Docker,Spring Boot,Dockerfile,我尝试在docker容器中基于下面的docker文件构建一个spring引导项目,但每次都是从internet下载所有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 RU

我尝试在docker容器中基于下面的docker文件构建一个spring引导项目,但每次都是从internet下载所有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映像中,并将
$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
  • 定义
    pom.xml
    所在的工作目录的位置
  • 定义已定位本地缓存的位置
  • 定义目标目录以将其映射到给定路径下的映像
  • 定义工作目录
  • 定义要使用的图像的名称
  • 所以你不需要创建一个新的形象来用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时应用image@Sathya对但是这是将我的local.m2装载到docker文件中运行的docker的方法吗谢谢。但docker运行命令,我的情况不同。我添加了新代码。我想现在你可以了解情况了。当我们使用docker运行命令时,我们可以装载文件夹。但是,当我们在docker文件中使用run命令时,它无法执行。你所说的
    我添加新代码是什么意思?
    。当然,如果你更改了自己的项目?…sry我更改了我的docker文件。运行时:-(docker build。)每次下载所有与maven相关的内容。我可以将本地m2与docker build链接吗