2017-08-29 57 views
2

docker build未使用緩存。碼頭不使用緩存

docker build -f Dockerfile . 

產生相同的輸出,這種作用:

docker build -f Dockerfile --no-cache . 

我修改Dockerfile,在該文件的末尾添加命令。所以以前的圖層應該被緩存和有效。

我有足夠的磁盤空間。

任何想法?

多克爾版本17.06.1策,建立874a737

Dockerfile:

FROM registry:5000/base/python:xenial 

RUN mkdir /code 
COPY . /code 

RUN apt-get update && \ 
    apt-get install -y \ 
    vim \ 
    less 

COPY /etc/foo /etc/foo 

ENTRYPOINT ["/bin/bash"] 

回答

7

從你Dockerfile,如果追加行到你的Dockerfile,或更改代碼正在修建,這裏只有一條線可能被緩存:

RUN mkdir /code 

之後,您執行:

COPY . /code 

既然你已經改變了你的Dockerfile的.內容已經改變(在Dockerfile是.部分),因此COPY需要重新進行,產生一個新的圖層。一旦生成新圖層,每個以後的圖層都不再具有緩存並需要重新生成。

要提高緩存效果,請考慮將更少的線條放在Dockerfile的頂部。這將使COPY . /code行位於文件的最後,因爲它幾乎每次都會改變。

+0

繁榮。謝謝! –

+0

我曾遇到過使用多個具有相同名稱的腳本來構建不同的碼頭圖像的情況。使用ADD,緩存忽略該文件是不同的,因此只有一個圖像是真正構建的。通過COPY,最後一層(消耗腳本的層)被重建,並且所有的碼頭圖像都被構建:)。謝謝 ! – Azurtree

+0

請注意,您可以在'.dockerignore'文件中包含'Dockerfile'(和'.dockerignore'),這樣它就不在ADD和COPY緩存分析中。 (你仍然應該按照推薦順序通過更改順序來確定你的Dockerfile。) – ldg