2014-08-30 53 views
6

我有一個〜300Mb的壓縮本地文件,我添加到碼頭圖像。下一個狀態然後提取圖像。Docker如何在沒有提交文件的情況下添加文件?

問題是,ADD語句導致提交導致新的文件系統層使圖像大於它所需要的300Mb。

ADD /files/apache-stratos.zip /opt/apache-stratos.zip 
RUN unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

問題:是否有變通方法來添加本地文件,而不會造成提交?

一個選項是運行一個簡單的Web服務器(例如python -m SimpleHTTPServer)啓動泊塢窗構建,然後用wget檢索文件,但似乎有點混亂之前:

RUN wget http://localhost:8000/apache-stratos.zip && \ 
    unzip -q apache-stratos.zip && \ 
    rm apache-stratos.zip && \ 
    mv apache-stratos-* apache-stratos 

另一種選擇是在容器啓動而不是構建時提取壓縮文件,但我寧願儘可能快地保持啓動。

回答

13

根據the documentation,如果您從本地文件系統(不是URL)將檔案文件傳遞到Dockerfile中的ADD(帶有目標路徑,而不是路徑+文件名),它會將該文件解壓縮到給定的目錄中。

如果<來源>是識別的壓縮格式 本地tar歸檔文件(身份,gzip的,bzip2的或XZ)然後將其解壓縮爲一個目錄。 來自遠程URL的資源未被解壓縮。當目錄被 複製或解包,它具有相同的行爲焦油-x:結果是 的聯合:

1)無論在目標路徑存在,2) 源樹的內容,衝突解決了「2」。在逐個文件的基礎上。

嘗試:

ADD /files/apache-stratos.zip /opt/ 

,看文件是否存在,而無需進一步壓縮。

+8

似乎並不解壓'在泊塢1.2.0 .zip'文件。 – 2014-09-02 02:56:22

+0

「如果[SRC]是識別的壓縮格式的本地tar歸檔文件(身份,gzip的,bzip2的或XZ)然後將其解壓縮爲一個目錄」。 – 2014-09-02 10:34:23

+0

缺少'.zip'文件支持添加的事實似乎是一個預期的決定:https://github.com/docker/docker/issues/15036 – jap1968 2017-01-17 08:30:17

2

您可以使用docker-squash壁球新建圖層。這應該顯着降低圖像尺寸。

不幸的是,提到的解決方法(RUN curl ... && unzip ... & rm ...,解壓集裝箱開始)是在時刻(泊塢窗1.11)是唯一的選擇。

相關問題