当前位置: 首页 > 面试题库 >

如何防止Dockerfile指令被缓存?

姬存
2023-03-14
问题内容

在我中,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文件,试图将一个web应用程序打包并部署到一个容器中。在Docker映像构建期间,app的代码从git存储库中获取。以下是Dockerfile快照: 我希望 docker 不要缓存 RUN git 克隆的步骤 -- 以便存储库上正在进行的更新可以反映在 Docker 映像构建中。有可能做到这一点吗?

  • 问题内容: 我已经编写了一个Linux驱动程序,该驱动程序ioremaps将特定设备的PCI BAR0导出为sysfs二进制属性,允许用户空间直接控制它。 当我尝试在属性顶部使用MMAP来直接访问该位内存(从Userland程序)时,问题就浮现了。读取可以很好地完成并返回期望值,尽管当我写入该内存时,它似乎被缓存在内核和内存之间的某个地方,而不是传递给GM​​CH根联合体(以及设备)。我想做的是每

  • 问题内容: 我目前正在为我的应用程序开发Node后端。在对其进行Docker化(docker build。)时,最长的阶段是。该指令在每个小的服务器代码更改上运行,通过使开发人员每次都等待构建完成来影响生产率。 我发现在应用程序代码所在的位置运行npm install并使用ADD指令将node_modules添加到容器中可以解决此问题,但这远非最佳实践。这有点破坏了将其Docker化的整个想法,并

  • 问题内容: 我有一个简单的html: 在test.js中,我更改了Javascript函数,但是我的浏览器正在缓存该文件。如何禁用脚本src的缓存? 问题答案: 将随机查询字符串添加到 您可以通过在每次更改时增加查询字符串来手动执行此操作: 或者,如果您使用服务器端语言,则可以自动生成以下内容: ASP.NET:

  • 场景是:您有一个有效期较长的刷新令牌和一个有效期限较短的访问令牌。 设置:有一个客户端、应用程序服务器和身份验证服务器。 客户端存储访问令牌。 应用程序服务器存储刷新令牌。 身份验证服务器分发刷新访问令牌。 其中一个优点是被盗的访问令牌只能在其有效的时间内使用。 假设黑客窃取了有效期为30分钟的访问令牌。当黑客在30分钟后用有效但过期的被盗访问令牌发出请求时,应用服务器用刷新令牌刷新它,从而黑客获

  • 问题内容: 我目前正在为我的应用程序开发Node后端。在对其进行docker化(docker build)时,最长的阶段是。该指令在每个小的服务器代码更改上运行,通过使开发人员每次等待构建完成来影响生产率。 我发现在应用程序代码所在的位置运行npm install并使用ADD指令将node_modules添加到容器中可以解决此问题,但这远非最佳实践。这有点破坏了将其Docker化的整个想法,并且使