如何防止Dockerfile指令被缓存?
在我中,Dockerfile
我使用curl
或ADD
下载档案的最新版本,例如:
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
使用curl
或ADD
创建自己的图像层的语句。它将用作以后执行的缓存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