How do I point a docker image to my .m2 directory for running maven in docker on a mac? How do I point a docker image to my .m2 directory for running maven in docker on a mac? linux linux

How do I point a docker image to my .m2 directory for running maven in docker on a mac?


To share the .m2 folder in build step you can overwrite the localRepository value in settings.xml.

Here is the Dockerfile snippet I used to share my local .m2 repository in docker.

FROM maven:3.5-jdk-8 as BUILDRUN 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/appRUN mvn --batch-mode -f /usr/src/app/pom.xml clean packageFROM openjdk:8-jreEXPOSE 8080 5005COPY --from=BUILD /usr/src/app/target /opt/targetWORKDIR /opt/targetENV _JAVA_OPTIONS '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'ENV swarm.http.port 8080CMD ["java", "-jar", "app-swarm.jar"]


How do I point a docker image to my .m2 directory for running maven in docker on a mac?

You rather point a host folder (like /Users/myname/.m2) to a container folder (not an image)

See "Mount a host directory as a data volume":

In addition to creating a volume using the -v flag you can also mount a directory from your Docker daemon’s host into a container.

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

This command mounts the host directory, /Users/myname/.m2, into the container at /root/.m2.
If the path /root/.m2 already exists inside the container’s image, the /Users/myname/.m2 mount overlays but does not remove the pre-existing content.
Once the mount is removed, the content is accessible again.
This is consistent with the expected behavior of the mount command.


Here are the Dockerfiles and docker-compose for example project containing one spring service and any other services;

Spring-service dockerfile

FROM maven:3.5-jdk-8-alpine WORKDIR /appCOPY . srcCMD 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"

Here in docker-compose we make volumes for our local .m2 repo and container one.