2017-07-30 52 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