如何将docker镜像指向我的.m2目录,以便在mac上的docker中运行maven?

haw*_*eye 8 linux macos maven vagrant docker

当您查看Dockerfile的maven构建时,它包含以下行:

VOLUME /root/.m2
Run Code Online (Sandbox Code Playgroud)

现在,如果这是我的.m2存储库在我的Mac上的位置,这将是很好的- 但它不是 - 它在

/Users/myname/.m2
Run Code Online (Sandbox Code Playgroud)

现在我能做到:

但是后来Docker中的linux实现不知道在那里看.我想将linux位置映射到mac位置,并将其作为我的一部分vagrant init.有一些像:

ln /root/.m2 /Users/myname/.m2
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将docker镜像指向我的.m2目录,以便在mac上的docker中运行maven?

Von*_*onC 6

如何将docker镜像指向我的.m2目录,以便在mac上的docker中运行maven?

您更喜欢将主机文件夹(如/Users/myname/.m2)指向容器文件夹(而不是图像)

请参阅" 将主机目录挂载为数据卷 ":

除了使用-v标志创建卷之外,您还可以将Docker守护程序主机中的目录安装到容器中.

$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Run Code Online (Sandbox Code Playgroud)

此命令将主机目录安装/Users/myname/.m2到容器中/root/.m2.
如果路径/root/.m2已存在于容器的图像中,则/Users/myname/.m2装载覆盖但不会删除预先存在的内容.
删除安装后,可以再次访问该内容.
这与mount命令的预期行为一致.

  • 由于某些原因,这对我不起作用。在构建阶段,maven 仍然下载依赖项...有什么建议吗? (2认同)
  • 只是docker在构建时无法共享卷。只是在运行中,https://github.com/docker/docker/issues/14080 (2认同)

Aru*_*n A 5

要在构建步骤中共享.m2文件夹,您可以覆盖settings.xml中的localRepository值。

这是我用来在docker中共享本地.m2存储库的Dockerfile片段。

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"]
Run Code Online (Sandbox Code Playgroud)