Chcete-li sdílet složku .m2 v kroku sestavení, můžete přepsat hodnotu localRepository v settings.xml.
Zde je fragment Dockerfile, který jsem použil ke sdílení svého místního úložiště .m2 v dockeru.
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"]
Jak nasměruji obrázek dockeru do mého adresáře .m2 pro spuštění maven v dockeru na Macu?
Raději nasměrujte hostitelskou složku (jako /Users/myname/.m2) na kontejner složku (nikoli obrázek)
Viz "Připojení hostitelského adresáře jako datového svazku":
Kromě vytvoření svazku pomocí
-v
můžete také připojit adresář z hostitele démona Docker do kontejneru .
$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Tento příkaz připojí hostitelský adresář
/Users/myname/.m2
, do kontejneru na/root/.m2
.
Pokud je cesta/root/.m2
již existuje uvnitř obrázku kontejneru,/Users/myname/.m2
připojit překryvy, ale neodstraní již existující obsah.
Po odstranění držáku je obsah opět přístupný.
To je v souladu s očekávaným chováním příkazu mount.
Zde jsou například projekt Dockerfiles a docker-compose obsahující jednu jarní službu a jakékoli další služby;
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"
Zde v docker-compose vytváříme objemy pro naše místní úložiště .m2 a kontejner jedna.