为什么docker build中的COPY没有检测到更新

Jas*_*ach 10 node.js docker

我在节点应用程序上运行构建,然后使用工件构建docker镜像.移动我的源的COPY命令在构建之后没有检测到源文件的更改; 它只是使用缓存.

Step 9/12 : COPY server /home/nodejs/app/server ---> Using cache ---> bee2f9334952

我在COPY上做错了什么,或者有没有办法不缓存特定的步骤?

her*_*erm 8

我在docker文档中找到了这个:

对于ADD和COPY指令,将检查图像中文件的内容,并为每个文件计算一个校验和。在这些校验和中不考虑文件的最后修改时间和最后访问时间。在高速缓存查找期间,将校验和与现有映像中的校验和进行比较。如果文件中的任何内容(例如内容和元数据)发生了更改,则缓存将无效。

因此,据我了解,缓存应该无效。您可以使用--no-cache = true进行确认。如果您使用--no-cache = true和错误行为获得正确的行为而没有发现错误,则应报告该错误。

  • 谢谢,很高兴知道它是如何工作的。我假设修改时间戳已被考虑在内。 (2认同)

Nic*_*ady 5

这很有趣。我发现它COPY 正在工作,但看起来却没有。

我正在重建映像并重新启动容器,但容器仍在使用旧映像。我必须删除我的容器,然后当我启动它们时,它们使用创建的新映像,我可以看到我的更改。

这是另一个线程,可以更准确地诊断此问题(就我而言)。


rsp*_*rsp -6

从 Docker 的角度来看,这就像任何其他命令一样。

Docker 看到这一行没有改变,所以它缓存了它。

同样,如果您的 Dockerfile 中有一个curl 命令,则当 URL 发生更改时,Docker 不会只是为了更改而获取该 URL。它检查命令是否更改,而不是结果。