docker - 为什么COPY指令在我的Docker构建中导致缓存未命中

标签 docker haskell travis-ci haskell-stack

我的项目的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/

相关文章:

mongodb - 尝试从 spring boot docker 容器连接到 mongo docker 容器时验证 MongoCredential 时出错?

haskell - 如何安全地 `mapM` 超过 `System.IO.openFile`

C++ Travis CI 和 Qt5

haskell - 简单的应用仿函数示例

Haskell - 优化微分方程求解器

amazon-ec2 - 结合travis和ec2

Python 导入在 travisCI 上失败但在本地失败

docker - Docker 'host' 和 'none' 网络有什么用?

node.js - 多个应用程序的 Docker 设计

docker - 访问 Kubernetes 中 pod 的其他容器