我的项目的docker文件中的copy instruction似乎导致了cache miss,即使自从上次将镜像推送到docker hub以来,复制的文件都没有更改。这将导致所有后续层都丢失高速缓存,从而使构建花费的时间大大超过了应有的时间。我还注意到,属于每一层的哈希似乎与在本地计算机上使用docker build
时的哈希不同。这可能是因为Docker版本不匹配吗?这里发生了什么?我该如何诊断?
最佳答案
检查使用docker history --no-trunc $image
构建的不同图像的层。在复制步骤中,您将看到正在复制的文件的“file:abc”哈希:
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:202cb043f70a2565ea40629e891642e1e24be7b52e29116a6520736f47183904 9 minutes ago /bin/sh -c #(nop) COPY file:d523f0d1cac93e44179baf9c36a7a4feff221b604224e26900075ddb02812448 in /test/test.txt 12B
如果您要构建的两个镜像之间的哈希值不同,则将使构建缓存无效并导致未命中。请记住,文件的元数据也会导致缓存未命中,尤其是文件权限。如果仍然有问题,请更新问题,以包括来自不同内部版本的
docker history --no-trunc ...
输出。
关于docker - 为什么COPY指令在我的Docker构建中导致缓存未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932954/