Docker build is not using cache

19,323

From your Dockerfile, if you append lines to your Dockerfile, or change the code being built, there's only one line that could be cached:

RUN mkdir /code

After that, you perform a:

COPY . /code

Since you have changed your Dockerfile, the contents of . have changed (the Dockerfile is part of .) and therefore the COPY needs to be performed again, generating a new layer. Once you generate a new layer, every following layer no longer has a cache and needs to be rebuild.

To improve caching, consider placing the lines that change less towards the top of your Dockerfile. That would leave the COPY . /code line at the very end of the file since it will change almost every time.

Share:
19,323
Mike Muldoon
Author by

Mike Muldoon

Updated on June 29, 2022

Comments

  • Mike Muldoon
    Mike Muldoon about 2 years

    docker build is not using it's cache.

    docker build -f Dockerfile .
    

    generates the same output that this does:

    docker build -f Dockerfile --no-cache .
    

    I am modifying the Dockerfile, adding commands at the end of the file. So the previous layers should be cached and valid.

    I've got plenty of disk space.

    Any ideas?

    Docker version 17.06.1-ce, build 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"]