Docker构建不使用缓存

Mik*_*oon 19 caching build docker

docker build 没有使用它的缓存.

docker build -f Dockerfile .
Run Code Online (Sandbox Code Playgroud)

生成与此相同的输出:

docker build -f Dockerfile --no-cache .
Run Code Online (Sandbox Code Playgroud)

我正在修改Dockerfile,在文件末尾添加命令.因此,前面的图层应该缓存并且有效.

我有足够的磁盘空间.

有任何想法吗?

Docker版本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"]
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 30

从您的Dockerfile,如果您将行附加到Dockerfile,或更改正在构建的代码,只有一行可以缓存:

RUN mkdir /code
Run Code Online (Sandbox Code Playgroud)

之后,你执行一个:

COPY . /code
Run Code Online (Sandbox Code Playgroud)

由于您更改了Dockerfile,因此内容.已更改(Dockerfile是其中的一部分.),因此COPY需要再次执行,生成新层.生成新图层后,每个后续图层都不再具有缓存,需要重建.

要改进缓存,请考虑将更少的行放在Dockerfile的顶部.这会将COPY . /code行留在文件的最后,因为它几乎每次都会改变.

  • 请注意,您可以在.dockerignore文件中包含`Dockerfile`(和`.dockerignore`),以便将其从`ADD`和`COPY`缓存分析中排除.(您仍然应该按照建议的更改顺序对Dockerfile进行订购.) (5认同)