Untuk membagikan folder .m2 pada langkah build, Anda dapat menimpa nilai localRepository di settings.xml.
Ini cuplikan Dockerfile yang saya gunakan untuk membagikan repositori .m2 lokal saya di 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"]
Bagaimana cara mengarahkan gambar buruh pelabuhan ke direktori .m2 saya untuk menjalankan maven di buruh pelabuhan di mac?
Anda lebih suka mengarahkan folder host (seperti /Users/myname/.m2) ke wadah folder (bukan gambar)
Lihat "Memasang direktori host sebagai volume data":
Selain membuat volume menggunakan
-v
tandai Anda juga dapat memasang direktori dari host daemon Docker Anda ke dalam wadah .
$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Perintah ini memasang direktori host,
/Users/myname/.m2
, ke dalam wadah di/root/.m2
.
Jika jalur/root/.m2
sudah ada di dalam image container,/Users/myname/.m2
pasang overlay tetapi tidak menghapus konten yang sudah ada sebelumnya.
Setelah mount dihapus, konten dapat diakses kembali.
Ini konsisten dengan perilaku yang diharapkan dari perintah mount.
Berikut adalah Dockerfiles dan docker-compose misalnya proyek yang berisi satu layanan pegas dan layanan lainnya;
dockerfile layanan musim semi
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"
Di sini, di docker-compose, kami membuat volume untuk repo .m2 dan container lokal kami.