Um den .m2-Ordner im Erstellungsschritt freizugeben, können Sie den localRepository-Wert in settings.xml überschreiben.
Hier ist das Dockerfile-Snippet, das ich verwendet habe, um mein lokales .m2-Repository in Docker freizugeben.
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"]
Wie zeige ich ein Docker-Image auf mein .m2-Verzeichnis, um Maven in Docker auf einem Mac auszuführen?
Sie verweisen lieber auf einen Container mit einem Host-Ordner (wie /Users/myname/.m2). Ordner (kein Bild)
Siehe „Ein Host-Verzeichnis als Datenvolume bereitstellen“:
Zusätzlich zum Erstellen eines Volumes mit -v
Flag können Sie auch ein Verzeichnis vom Host Ihres Docker-Daemons in einen Container mounten .
$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Dieser Befehl hängt das Hostverzeichnis /Users/myname/.m2
ein , in den Container bei /root/.m2
.
Wenn der Pfad /root/.m2
existiert bereits im Image des Containers, der /Users/myname/.m2
Mount-Overlays, entfernt jedoch nicht den bereits vorhandenen Inhalt.
Sobald die Halterung entfernt wird, ist der Inhalt wieder zugänglich.
Dies stimmt mit dem erwarteten Verhalten des Befehls mount überein.
Hier sind die Dockerfiles und das Docker-Compose-Beispielprojekt, das einen Spring-Dienst und alle anderen Dienste enthält;
Spring-Service-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"
Hier in Docker-Compose erstellen wir Volumes für unser lokales .m2-Repo und Container One.