您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

docker在git checkout同一文件时添加缓存

docker在git checkout同一文件时添加缓存

文件的mtime值更改并且git不跟踪文件的mtime值时,Docker使docker build缓存无效。这种缓存失效也会在其他情况下出现,例如在持续集成或涉及docker,git和branchs的构建环境中。

在要求docker构建容器之前,我一直在运行的Makefile中使用“触摸”目标:

touch:
    @echo "Reset timestamps on git working directory files..."
    find ./ | grep -v .git | xargs touch -t 200001010000.00

接下来,始终在同一Makefile中运行make touchdocker build或始终在同一基于docker的“ build”目标中运行…

一个选项是设置一个git钩子,该钩子会自动修改mtime值:https ://git.wiki.kernel.org/index.PHP/ExampleScripts#Setting_the_timestamps_of_the_files_to_the_commit_timestamp_of_the_commit_which_last_touched_them

一个可能的解决方案是派生docker并将mtime从其缓存定义中删除https ://github.com/docker/docker/blob/master/pkg/tarsum/tarsum.go

:从docker 1.8开始,mtime使缓存无效时不再考虑在内。拉取请求#12031更新了此行为

其他 2022/1/1 18:13:44 有670人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶