Dockerfile不一致的caching

根据Docker文档 ,docker build应该caching所有没有改变的行。

问题是,即使我不改变我的Dockerfile或只改变它的结束,图像重build从开始或随机放置在Dockerfile中途。 其他时候caching工作正常。 我没有ADD命令。

我用来构build我的图像的命令是docker build --tag=pineapple/orange .

输出开始如下所示:

 Step 1 : FROM centos:7 ---> 0f0be3675ebb Step 2 : MAINTAINER Dixie Chicks <DixieChicks@music.com> ---> Using cache ---> 7669f54fc137 Step 3 : RUN yum update && yum install -y epel-release && yum install -y wget git python-devel && wget "https://bootstrap.pypa.io/get-pip.py" && python get-pip.py ---> Running in 92a8f1cff2db Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: centos.den.host-engine.com * extras: centos-mirror.jchost.net * updates: centos.chicago.waneq.com ... [starts re-installing everything] 

构buildcaching不能使用显式标签吗? 我可以用什么策略来弄清楚为什么会发生这种情况?

编辑:如果它有所作为,我一直在PyCharm编辑Dockerfile。

我更喜欢在自己的基本映像中隔离Dockerfile的第一行:

 FROM centos MAINTAINER Dixie Chicks <DixieChicks@music.com> RUN yum update && \ yum install -y epel-release && \ yum install -y wget \ git \ python-devel && \ wget "https://bootstrap.pypa.io/get-pip.py" && \ python get-pip.py 

我构build一次基础镜像,然后创build另一个Dockerfile,它从以下位置开始:

 FROM myBaseImage 

这样,我可以根据需要多次重build我的第二个Dockerfile,所有先决条件安装已经完成(并且从不重新编译)在第一个图像。

caching基于三angular洲系统(差异)。

百胜娱乐城更新和你的命令中的一些几乎永远不会以相同的三angular洲结束。 所需要的是第三方回购更新该文件成为一个不同的散列。 随着软件包的变化,最终的结果将会不同。

它基本上不能caching。 你最好打赌,如果你有一套特定的软件包,以确保做VonC所说的,并将其打包在一个必备的容器中。

这也使得我在操作时感到高兴,因为我知道如果现在就build立它,而现在7天,我将会得到相同的包。 在你的例子中,如果你现在创build它并收到了wget- {version a},你可能会在将来再次构build它,并获得wget- {version b}。 也许这个版本在旗帜或图书馆等方面有所不同,导致连锁反应和你的应用程序的根本行为。 虽然罕见,这不是不可能的。