h3n*_*rik 30 curl caching docker 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 Code Online (Sandbox Code Playgroud)
RUN
使用curl
或ADD
创建自己的图像层的语句.这将用作未来执行的缓存docker build
.
问题:如何禁用该指令的缓存?
在那里工作缓存失效之类的东西会很棒.例如,通过使用HTTP ETag或通过查询最后修改的头字段.这样就可以根据HTTP标头进行快速检查,以确定是否可以使用缓存层.
我知道一些肮脏的技巧可以帮助例如在RUN
语句中执行下载shell脚本.它的文件名将在docker build
我们的构建系统触发之前更改.我可以在该脚本中进行HTTP检查.但后来我需要将最后使用过的ETag或最后修改过的文件存储到某个文件中.我想知道是否有一些我可以使用的更干净和原生的 Docker功能,在这里.
Von*_*onC 31
docker build --no-cache会使所有命令的缓存无效.
Dockerfile ADD命令用于使缓存失效.虽然最近的docker版本有所改进:
Docker应该校验通过ADD添加的任何文件,然后决定是否应该使用缓存.
因此,如果添加的文件已更改,则该ADD
命令的缓存应该无效.
问题1326提到了其他提示:
这很有效.
RUN yum -y install firefox #redo
Run Code Online (Sandbox Code Playgroud)
所以看起来Docker将重新运行该步骤(以及它下面的所有步骤),如果我传递给
RUN
命令的字符串无论如何都会发生变化 - 即使它只是一个注释.仅使用docker缓存,并且仅当他的祖先没有发生任何变化时(此行为才有意义,因为下一个命令会将更改添加到上一层).
如果没有任何已更改的字符,则使用缓存(因此即使空间足以使缓存无效).
Rui*_* Ma 29
可以指定构建时参数从该步骤开始强制中断缓存.例如,在你的Dockerfile中,put
ARG CACHE_DATE=not_a_date
Run Code Online (Sandbox Code Playgroud)
然后在每个新构建上给这个参数一个新的值.当然,最好的是时间戳.
docker build --build-arg CACHE_DATE=$(date +%Y-%m-%d:%H:%M:%S) ...
Run Code Online (Sandbox Code Playgroud)
确保该值是一个没有任何空格的字符串,否则docker客户端将错误地将其作为多个参数.
查看问题22832的详细讨论.
归档时间: |
|
查看次数: |
16875 次 |
最近记录: |