2017-07-30 98 views
2

如果我运行一个docker build,将maven依赖关系下拉到.m2存储库中,但它不会保留在映像中。docker build后缺少m2 repository

因此,如果我然后尝试i) tty到一个正在运行的容器中,我的~/.m2/repository目录将是空的。或者ii)如果我在第一个图像上创建另一个图像,那么这些图层将不得不再次下载。

我的Dockerfile的内容在这里。

FROM maven:3.5.0-jdk-8-alpine 

RUN apk update \ 
    && apk add ca-certificates \ 
    && update-ca-certificates \ 
    && apk add openssl \ 
       bash \ 
       git 

WORKDIR /app 
COPY . /app 

RUN mvn compile 

我敢肯定这是码头工人的一些简单细节,我不理解。任何人有任何见解?

+0

泊坞窗构建不拉任何Maven依赖成'$ HOME/.m2目录/ repository' ......只有当你运行某种的Maven构建,这意味着他们将不会被永久的容器内。 ..通过容器的定义....如果你想让你的'$ HOME/.m2/repository'通过依赖关系得到增强,你必须将它作为一个卷装入你的容器中......这意味着运行容器内的进程写入它。 – khmarbaise

+0

你能分享你的dockerfile的细节吗? – vegiops

+0

@vegiops当然,补充。 – Nutritioustim

回答

1

@khmarbaise是的,你说得对。我只需在我的Dockerfile中指定一个VOLUME /root/.m2/repository条目。我也删除了缓存容器和卷,只是为了确保。正如我预料的那样,储存库就在那里。

所以我的Dockerfile现在看起来像这样。我没有完整的码头卷。但现在这一切都有道理。谢谢。

FROM maven:3.5.0-jdk-8-alpine 

RUN apk update \ 
    && apk add ca-certificates \ 
    && update-ca-certificates \ 
    && apk add openssl \ 
       bash \ 
       git 

WORKDIR /app 
COPY . /app 
VOLUME /root/.m2/repository 

RUN mvn compile