Para compartir la carpeta .m2 en el paso de compilación, puede sobrescribir el valor de localRepository en settings.xml.
Aquí está el fragmento de Dockerfile que usé para compartir mi repositorio local .m2 en Docker.
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"]
¿Cómo apunto una imagen de ventana acoplable a mi directorio .m2 para ejecutar maven en ventana acoplable en una Mac?
Prefiere apuntar una carpeta de host (como /Users/myname/.m2) a un contenedor carpeta (no una imagen)
Consulte "Montar un directorio de host como un volumen de datos":
Además de crear un volumen usando el -v
flag también puede montar un directorio desde el host de su demonio Docker en un contenedor .
$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Este comando monta el directorio host, /Users/myname/.m2
, en el contenedor en /root/.m2
.
Si la ruta /root/.m2
ya existe dentro de la imagen del contenedor, el /Users/myname/.m2
monta superposiciones pero no elimina el contenido preexistente.
Una vez que se quita la montura, se puede volver a acceder al contenido.
Esto es consistente con el comportamiento esperado del comando de montaje.
Aquí están los archivos Dockerfiles y docker-compose, por ejemplo, un proyecto que contiene un servicio Spring y cualquier otro servicio;
Dockerfile de servicio de primavera
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"
Aquí, en docker-compose, creamos volúmenes para nuestro repositorio local .m2 y el contenedor uno.