Как включить локальный компьютер ~/.m2/repository
в mvn dependency:resolve
этап docker build
? Для docker build
нет опции -v
. Возможно ли с помощью docker build
быть совместимым с существующим конвейером сборки (разрешен только отдельный Dockerfile)? Этот ответ не помог.
Текущий Dockerfile:
FROM maven:3.6.2-jdk-11 AS maven
WORKDIR /tmp/
# Set the local repository to /tmp/.m2/repository
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>/tmp/.m2/repository</localRepository> \
<interactiveMode>true</interactiveMode> \
<usePluginRegistry>false</usePluginRegistry> \
<offline>false</offline> \
</settings>" \
> /usr/share/maven/conf/settings.xml;
# TODO: How to perform -v ~/.m2/:/tmp/.m2/ but only using `docker build`?
COPY pom.xml /tmp/
RUN mvn dependency:resolve
RUN mvn dependency:resolve-plugins
COPY src /tmp/src/
RUN mvn package
FROM openjdk:11-jre-slim
EXPOSE 8080
RUN apt update
RUN apt -y install curl
WORKDIR /usr/app
ENV TARGET="<target name>.jar"
COPY --from=maven "/tmp/target/$TARGET" .
CMD ["java", "-jar", "$TARGET"]
И, конечно, это не работает:
![Failed copy](https://i.stack.imgur.com/dLPQ0.png)
Обновление: я могу смонтировать папку, указывающую на локальный репозиторий .m2, и скопировать всю папку в образ докера. Однако теперь я не могу заставить mvn
использовать это локальное репо.
![able to copy local repo](https://i.stack.imgur.com/Qj1Iy.png)
Тогда
COPY pom.xml /tmp/
RUN mvn -o -s /usr/share/maven/conf/settings.xml dependency:resolve -X
приведет к ошибке:
Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact com.myapp:somename:pom:1.0.4 has not been downloaded from it before.