如何将Docker镜像指向我的,m2目录用于在mac上的docker中运行maven?

sd2nnvve  于 2023-04-29  发布在  Maven
关注(0)|答案(4)|浏览(149)

当你查看Dockerfile for a maven build时,它包含了一行:

VOLUME /root/.m2

如果这是我的.m2存储库在我的mac上的位置,那就太好了-但它不是-它在

/Users/myname/.m2

现在我可以做:
但是Docker中的linux实现不知道去那里看。我想把linux的位置Map到mac的位置,并把它作为我的vagrant init的一部分。就像是:

ln /root/.m2 /Users/myname/.m2

我的问题是:如何将Docker镜像指向我的。m2目录用于在mac上的docker中运行maven?

6l7fqoea

6l7fqoea1#

如何将Docker镜像指向我的。m2目录用于在mac上的docker中运行maven?
您宁愿指向一个主机文件夹(如/Users/myname/)。m2)到 container 文件夹(不是图像)
请参阅“将主机目录装载为数据卷”:
除了使用-v标志创建卷外,您还可以将Docker守护程序主机上的目录挂载到容器中

$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py

此命令将主机目录/Users/myname/.m2装入/root/.m2处的容器。
如果路径/root/.m2已经存在于容器映像中,/Users/myname/.m2挂载会覆盖但不会删除预先存在的内容。
一旦移除装载,就可以再次访问内容。
这与mount命令的预期行为一致。

jhiyze9q

jhiyze9q2#

分享。m2文件夹中,您可以覆盖设置中的localRepository值。xml文件。
这是我用来分享我的本地的Dockerfile片段。docker中的m2仓库。

FROM maven:3.5-jdk-8 as BUILD

RUN echo \
    "<settings xmlns='http://maven.apache.org/SETTINGS/1.0.0\' \
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
    xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd'> \
        <localRepository>/root/Users/myname/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /usr/share/maven/conf/settings.xml;

COPY . /usr/src/app
RUN mvn --batch-mode -f /usr/src/app/pom.xml clean package

FROM openjdk:8-jre
EXPOSE 8080 5005
COPY --from=BUILD /usr/src/app/target /opt/target
WORKDIR /opt/target
ENV _JAVA_OPTIONS '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
ENV swarm.http.port 8080

CMD ["java", "-jar", "app-swarm.jar"]
xbp102n0

xbp102n03#

下面是Dockerfiles和docker-compose示例项目,包含一个Spring服务和任何其他服务;
Spring服务dockerfile

FROM maven:3.5-jdk-8-alpine 

WORKDIR /app

COPY . src

CMD cd src ; mvn spring-boot:run

docker-compose.yml

version: '3'

services:

  account-service:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - "${HOME}/.m2:/root/.m2"

在docker-compose中,我们为本地用户制作卷。M2回购和容器1。

xhv8bpkk

xhv8bpkk4#

我使用maven:3-amazoncorretto-17作为我的基本图像。
利用Arun A's answer中的一些信息,我能够提出一个非常简单的解决方案。(对我来说)棘手的部分是弄清楚设置在哪里。XML需要进入容器。此外,本示例仅安装settings.xml
使用docker-compose

volumes:
      - "~/.m2/settings.xml:/usr/share/maven/conf/settings.xml"

docker run -v

$ docker run -v ~/.m2/settings.xml:/usr/share/maven/conf/settings.xml maven:3-amazoncorretto-17

此语法应适用于Windows和Mac。

相关问题