如何破坏Dockerfile的FROM行的缓存

时间:2018-08-16 03:38:43

标签: docker dockerfile

我有一个像这样的Dockerfile:

FROM python:2.7

RUN echo "Hello World"

当我第一次使用docker build -f Dockerfile -t test .构建此文件或使用--no-cache选项构建它时,我得到以下输出:

Sending build context to Docker daemon  40.66MB
Step 1/2 : FROM python:2.7
 ---> 6c76e39e7cfe
Step 2/2 : RUN echo "Hello World"
 ---> Running in 5b5b88e5ebce
Hello World
Removing intermediate container 5b5b88e5ebce
 ---> a23687d914c2
Successfully built a23687d914c2

我的echo命令执行。

如果我在不破坏高速缓存的情况下再次运行它,我会得到:

Sending build context to Docker daemon  40.66MB
Step 1/2 : FROM python:2.7
 ---> 6c76e39e7cfe
Step 2/2 : RUN echo "Hello World"
 ---> Using cache
 ---> a23687d914c2
Successfully built a23687d914c2
Successfully tagged test-requirements:latest

缓存用于步骤2/2,并且不执行Hello World。我可以使用--no-cache重新执行它。但是,每次即使使用--no-cache时,它也会使用已缓存的python:2.7基本映像(尽管与echo命令被缓存时不同,它不会说---> Using cache )。

如何破坏FROM python:2.7行的缓存?我知道我可以做FROM python:latest,但是这似乎也可以缓存您第一次构建Dockerfile时的最新版本。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了上下文,则可以在使用--pull的同时使用docker build来获取最新的基本图像-

$ docker build -f Dockerfile.test -t test . --pull

因此,同时使用--no-cache--pull将使用Dockerfile创建绝对新鲜的映像-

$ docker build -f Dockerfile.test -t test . --pull --no-cache

问题-https://github.com/moby/moby/issues/4238

答案 1 :(得分:1)

FROM从注册表(在本例中为DockerHub)中提取图像。

将图像拉出以生成构建后,如果运行docker images,您将看到它。

您可以通过运行docker rmi python:2.7将其删除。