docker build .
将根据当前目录中的 Dockerfile
重建 docker 镜像,并忽略与 .dockerignore
文件匹配的任何路径.
如果磁盘上的文件与上次构建的文件不同,则该 Dockerfile 中的任何 COPY
语句都会导致构建缓存失效。
我注意到,如果你不忽略 .git
目录,像 git fetch
这样没有副作用的简单操作会导致构建缓存失效(可能是因为 .git
目录中的某些跟踪信息已更改。
如果我知道如何准确地查看哪些文件导致缓存失效,那将会非常很有帮助...但是我一直找不到方法.
最佳答案
我认为没有办法使用当前 Docker image design 查看哪个文件使缓存无效.
图层和图像since v1.10 are 'content addressable' .他们的 ID 基于反射(reflect)其内容的 SHA256 校验和。
caching code只需查找仅在整个层的内容匹配(或可能发生冲突)时才会存在于 Docker 引擎中的图像/层的 ID。
因此,当您运行 docker build
时,会为 Dockerfile
中的每个命令创建一个新的构建上下文。为该命令将产生的整个层计算校验和。然后 docker 检查是否存在具有该校验和的现有层并运行配置。
我可以看到获取单个文件详细信息的唯一方法是重新计算目标文件校验和,这可能会抵消大部分缓存速度。如果您确实想这样做,另一个问题是决定检查哪一层。您必须查找以前的图像构建树(可能通过标签?)才能找到以前可比较层的内容。
关于docker - 如何查看哪些文件导致 Dockerfile `COPY` 语句使缓存无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39217823/