caching - 如何防止 Dockerfile 指令被缓存?

标签 caching curl docker 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
...

使用 curlADDRUN 语句会创建自己的图像层。这将用作 docker build future 执行的缓存。

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

如果能在那里工作,那就太好了。例如。通过使用 HTTP ETags或通过查询 last modified header 字段。这样就可以根据 HTTP header 进行快速检查,以确定是否可以使用缓存层。

我知道一些肮脏的技巧可能会有所帮助,例如而是在 RUN 语句中执行下载 shell 脚本。在我们的构建系统触发 docker build 之前,它的文件名将被更改。我可以在该脚本中进行 HTTP 检查。但是我需要将最后使用的 ETaglast modified 存储到某个文件中。我想知道这里是否有一些更干净和原生 Docker 功能可以使用。

最佳答案

可以指定构建时参数以从该步骤开始强制中断缓存。例如,在您的 Dockerfile 中,放置

ARG CACHE_DATE=not_a_date

然后在每个新构建中赋予这个参数一个新的值。最好的当然是时间戳。

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

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

详细讨论见 Issue 22832 .

关于caching - 如何防止 Dockerfile 指令被缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782220/

相关文章:

php - Zend Server "Caching"的 JS 和 CSS 文件

php - 如何用 python 重写这个 POST curl 脚本?

php - WordPress 透明 OAuth 1.0 使用 PHP 登录

Django REST API 设置允许单个端点的主机

android - Volley 缓存总是在 android 中返回 null

apache - 尽管有vcl规则,但Varnish不会忽略子域

curl - 使用带有 Telnet 连接的 Curl 调用 Web 服务

postgresql - 使用 docker-compose 在 postgresql 中启用日志记录

javascript - 有一种方法可以将变量从 userdata 传递到 docker-compose 到 EC2 实例中的 nginx

"use runtime optimized javascript and css resources"时在 XPage 中缓存 CSS 和 JS 资源