小编典典

如何防止Dockerfile指令被缓存?

docker

在我中,Dockerfile我使用curlADD下载档案的最新版本,例如:

FROM debian:jessie
...
RUN apt-get install -y curl
...
RUN curl -sL http://example.com/latest/archive.tar.gz --output archive.tar.gz
...
ADD http://example.com/latest/archive2.tar.gz
...

RUN使用curlADD创建自己的图像层的语句。它将用作以后执行的缓存docker build

问题 :如何禁用该指令的缓存?

让类似 缓存失效的 东西在那里工作会很棒。例如,通过使用HTTP
ETag
或查询 最后修改的
标头字段。这样就可以根据HTTP标头进行快速检查,以决定是否可以使用缓存的层。

我知道一些肮脏的技巧可以帮助例如在RUN语句中执行下载Shell脚本。在docker build我们的构建系统触发之前,将更改其文件名。我可以在该脚本中进行HTTP检查。但是然后我需要将上次使用的 ETag 或上 一次修改
后的文件存储到某个地方。我想知道这里是否可以使用一些更干净的 本机 Docker功能。


阅读 701

收藏
2020-06-17

共1个答案

小编典典

可以指定一个build-time参数来强制从该步骤开始中断高速缓存。例如,在您的Dockerfile中,将

ARG CACHE_DATE=not_a_date

然后为每个新版本赋予该参数新的价值。最好的当然是时间戳记。

docker build --build-arg CACHE_DATE=$(date +%Y-%m-%d:%H:%M:%S) ...

确保该值是没有任何空格的字符串,否则Docker客户端会错误地将其用作多个参数。

请参见有关问题22832的详细讨论。

2020-06-17