在我中,Dockerfile我使用curl或ADD下载档案的最新版本,例如:
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。
RUN
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的详细讨论。