我对我看到的一些docker缓存行为感到困惑。Docker缓存混淆
首先我做一个码头构建,然后将镜像推送到一个存储库,然后我在本地删除所有我的码头数据(我在OSX上的一个虚拟机上运行docker,因此我销毁并重新创建VM) 。然后我拉出刚推入存储库的图像。
现在,我对我的代码做了任何改变,例如,在自述文件中添加一个换行符。当我运行docker构建时,没有任何步骤被缓存。它从一开始就逐一运行所有步骤。
当然,我预计任何COPY .
步骤都会失效,因为我更新了代码,但是甚至之前的步骤都是无效的。
为什么会发生这种情况?
UPDATE:
这里是我的输出(匿名位)。
有没有命令行参数,这种情况发生的时候我就跑docker build .
Step 1 : FROM 123456.dkr.ecr.us-east-1.amazonaws.com/foo:0.1.1 0.1.1: foo d89e1bee20d9: Already exists 9e0bc8a71bde: Already exists 27aa681c95e5: Already exists a3ed95caeb02: Already exists 1f23dc7f328b: Already exists 7c5e36b70451: Already exists 0844dd833da6: Already exists 8017b7feecce: Already exists 0dd824b407cc: Already exists ecfa07005844: Already exists 697248412260: Already exists df6663ccf76d: Already exists Digest: sha256:823221727843f32d1a52879aa57e40e02f4db2b31a2344384fc0307fa85c2b52 Status: Downloaded newer image for 123456.dkr.ecr.us-east-1.amazonaws.com/foo:0.1.1 ---> b6b907685beb Step 2 : RUN curl https://example.com > /file ---> Running in 1f912826e4c8 OK
它说,它“下载新的形象”为“foo”的基本图像,会是其中问题是?正如你所看到的那样,所有的图层都已经存在了。所以奇怪的是,它认为它已经下载了一个更新的图像,也许这与下面的步骤没有被缓存的原因有关?
您使用的是什么版本的docker? – saada
@saada Docker 1.9.1,我使用的存储库是AWS ECR存储库,如果这有所帮助。 – danny
使用Docker重复您的实验1.10 – saada