首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从码头上删除一个单层以防止缓存吗?

我可以从码头上删除一个单层以防止缓存吗?
EN

Stack Overflow用户
提问于 2021-11-04 15:49:19
回答 6查看 896关注 0票数 13

我有一个长期运行的坞构建过程,所以我不希望禁用整个构建的缓存(使用--no-cache)。但是,我想使特定步骤的缓存无效。

我有一个好主意:移除缓存的层并重建,所以这必须重建。

我用:

代码语言:javascript
复制
docker build --progress=plain

要获取缓存层的沙:

代码语言:javascript
复制
#16 [stage-9  3/15] RUN pip install -r /tmp/requirements.lock
#16 sha256:e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798e
#16 CACHED

但是我得到了这个错误

代码语言:javascript
复制
> docker rmi e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798
Error: No such image: e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798

是否有一种(容易)删除此层的方法?

注意:对于大多数用例(甚至是本用例),您可能希望为docker build使用-无缓存选项

EN

回答 6

Stack Overflow用户

发布于 2022-08-26 13:23:59

没有直接的可能。但是可以通过对您的停靠文件进行一些更改来完成。

要强行破坏缓存,可以使用“构建时参数”(ARG);更改该参数的值将中断缓存,例如:

代码语言:javascript
复制
FROM something
RUN apt-get update && apt-get install foo bar baz ......

ARG CACHE_DATE=2016-01-01

# steps below will always be executed if `CACHE_DATE` is changed to a unique value
RUN blablabla

并在构建期间为CACHE_DATE设置一个新的日期:

代码语言:javascript
复制
docker build --build-arg CACHE_DATE="$(date)" ....

详细信息直接从这个github问题获取。

票数 6
EN

Stack Overflow用户

发布于 2022-04-05 02:16:53

也许您可以通过以下命令删除:

代码语言:javascript
复制
docker rm e4ac79a1eac5702cd296ccf33a1cfa2e0c3890c77d42737dc62a3b26ac3e798

因为您仍然在使用相同的图像,并且只使用不同的容器。

票数 3
EN

Stack Overflow用户

发布于 2022-08-26 16:15:25

如果您愿意的话,有一种很麻烦的方法可以这样做,而且它可能不适用于您的用例.但是,在我多年来为cycle.io团队所做的大量QA期间,我发现如果我需要控制缓存层,我可以将其移到Dockerfile的末尾,并在其前面为任意文件(例如.txt文件)设置一个“拷贝”步骤。如果对txt文件进行更改,它将使以下所有步骤的缓存无效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69842045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档