2017-08-29 12 views
2

docker buildはキャッシュを使用していません。私は、ファイルの末尾にコマンドを追加、Dockerfileを変更していますドッカービルドキャッシュを使用していません

docker build -f Dockerfile --no-cache . 

docker build -f Dockerfile . 

が、これがないのと同じ出力を生成します。したがって、以前のレイヤーはキャッシュされ、有効である必要があります。

私は十分なディスク容量を持っています。

アイデア?

ドッカーバージョン17.06.1-CE、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 

は、その後、あなたが実行します

Dockerfileを変更したため、.の内容が変更されました(Dockerfileは.の一部です)。したがって、COPYを再度実行して新しいレイヤーを生成する必要があります。新しいレイヤーを生成すると、以降の各レイヤーにはキャッシュがなくなり、再構築が必要になります。

キャッシングを改善するには、変更の少ない線をDockerfileの上部に配置することを検討してください。それはほとんど毎回変わるので、ファイルの最後にCOPY . /code行を残します。

+0

ブーム。ありがとうございました! –

+0

異なるドッカー画像を構築するために同じ名前の複数のスクリプトを使用した場合がありました。 ADDを使用すると、キャッシュされたファイルはファイルが異なるため無視され、実際には1つのイメージしか作成されませんでした。 COPYでは、最後のレイヤー(スクリプトを消費するレイヤー)が再構築され、すべてのドッカー画像が作成されます。ありがとう! – Azurtree

+0

'Dockerfile'(と' .dockerignore')を.dockerignoreファイルに含めることができるので、 'ADD'と' COPY'キャッシュ解析から除外されていることに注意してください。 (あなたは間違いなくあなたのDockerfileを推奨どおりに変更順に注文する必要があります。) – ldg

関連する問題