将 Maven 存储库安装到 Docker

Mounting Maven Repository to Docker

我正在尝试构建一个 Java 应用程序并使用 docker 制作一个包。这个构建需要一个我不想包含在图像中的 Maven 存储库,因为它非常大。我想尝试使用卷并将我的本地 maven 存储库挂载到图像中的 maven 存储库。我使用 apt-get install -y maven 以使 maven 可用,但我在图像 $HOME 中找不到目录 .m2

我用ls -la $HOMEls -lals -la /root找到了maven home,但是那里没有.m2目录。

编辑 1:

我在 Dockerfile 中有这些行:

FROM ubuntu
MAINTAINER Zeinab Abbasimazar
# Install and configure required packages
RUN apt-get update; \
    apt-get install -y --no-install-recommends apt-utils; \
    apt-get install -y dialog; \
    apt-get install -y wget unzip curl maven; \
    mkdir $HOME/.m2/; \
    ls -la /usr/share/maven/conf/; \
    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/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /usr/share/maven/conf/settings.xml
VOLUME ["/home/zeinab/.m2/", "/root/.m2/"]
# Build
RUN mvn  -X clean install -pl components -P profile

将本地仓库配置放在镜像的maven配置文件中,将我的本地maven仓库挂载到镜像中的一个目录,最后执行构建。正如我在 Maven 构建日志中看到的那样,它使用的是我预期的本地存储库路径:

[DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
[DEBUG] Reading user settings from /root/.m2/settings.xml
[DEBUG] Using local repository at /root/.m2/repository

但仍然无法检测到依赖项。

您找不到 ~/.m2 目录,因为它仅在需要时创建,即当您将库存储在本地存储库中或添加配置文件时。

您可以自己创建~/.m2目录,并在里面创建自己的settings.xml。在那里你可以定义本地存储库的位置:

<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>/path/to/local/repo/</localRepository>
  ...
</settings>

阅读 documentation 了解更多详情。

我终于在 docker 中找到了挂载本地 maven 存储库的解决方案。我改变了我的解决方案;我将其安装在 run 阶段而不是 build 阶段。这是我的 Dockerfile:

FROM ubuntu
MAINTAINER Zeinab Abbasimazar
ADD gwr $HOME
RUN apt-get update; \
    apt-get install -y --no-install-recommends apt-utils; \
    apt-get install -y wget unzip curl maven git; \
    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/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /usr/share/maven/conf/settings.xml; \
    mkdir /root/.m2/; \
    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/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /root/.m2/settings.xml
WORKDIR .
CMD mvn  -X clean install -pl components -P profile

首先,我使用上面的 Dockerfile:

构建图像
sudo docker build -t imageName:imageTag .

然后,我运行一个容器如下:

sudo docker run -d -v /home/zeinab/.m2/:/root/.m2/ --name containerName imageName:imageTag