如何调试Docker缓存失效?


15

Docker有一个缓存,这很棒,但是我在“ docker build”输出中看到的只是:

---> Using cache

或命令的输出(这意味着它没有使用缓存)。

在我的Dockerfile中执行了一个步骤(COPY)之后,它显然不使用缓存。但我可以肯定地说,它正在复制的文件夹中没有任何更改。(这是我们的应用程序,例如,即使连续两次部署,我也会遇到无缓存的情况。)

有什么方法可以让Docker告诉我它认为发生了什么变化?

我知道Docker曾经为此检查时间戳,但这在Docker 1.8中已解决,我在Docker 1.9.x上。


Dockerfile
Joel E Salas

1
@JoelESalas:我不理解您的要求。诸如此类的简单操作FROM ubuntu:14.04 MAINTAINER me COPY /app/ /app/将证明这一点。而且我不会发布我的整个源代码和基础架构。
Timmay'1

1
此外,即使查看Dockerfile可能会有所帮助,但问题是如何诊断此类问题。我不希望其他人查看我的配置并告诉我答案。我想知道有哪些工具可以帮助解决问题。
Timmay'1

您如何确定该目录中没有任何变化?
乔尔·萨拉斯

Answers:


4

通过使用二进制搜索.dockerignore

将一半文件添加到中.dockerignore,然后构建容器。如果它使用高速缓存作为COPY步骤,那么您将知道已更改的文件在您忽略的集合中,否则您将知道在另一半中。对具有更改的文件集重复此测试,直到只有一个文件/文件夹为止。

(亲爱的lazyweb:找出扩展Docker的方法,以减轻痛苦!)


2
听起来不错,可以在本地调试某些东西。就我而言,我目前正在尝试在CI环境中调试Docker缓存,但我感到有点沮丧,因为我似乎找不到任何方法使Docker构建更详细= /
elias
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.