如何防止Dockerfile指令被缓存?

在我中,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功能。

回答:

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

ARG CACHE_DATE=not_a_date

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

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

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

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

以上是 如何防止Dockerfile指令被缓存? 的全部内容, 来源链接: utcz.com/qa/424307.html

回到顶部