当前位置: 首页 > 知识库问答 >
问题:

禁用特定RUN命令的缓存

陆畅
2023-03-14

在Docker文件中,我有几个运行命令,每次构建Docker图像时,我都希望使用这些命令运行。

我知道docker构建-无缓存将禁用整个Dockerfile的缓存。

是否可以禁用特定RUN命令的缓存?

共有3个答案

杨和蔼
2023-03-14

不是直接的,但是你可以把你的Dockerfile分成几个部分,构建镜像,然后在下一个Dockerfile的开头创建镜像,并在有或没有缓存的情况下构建镜像

拓拔嘉运
2023-03-14

使用

ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache

在跑步之前,你要一直跑步。这是有效的,因为ADD总是获取文件/URL,并且上面的URL会在每个请求中生成随机数据,Docker然后比较结果,看看是否可以使用缓存。

我还测试了它,效果很好,因为它不需要任何额外的Docker命令行参数,也可以从Docker compose中工作。yaml文件:)

司寇昱
2023-03-14

在要禁用缓存的区域之前,总是可以选择插入一些无意义且廉价的运行命令。

如本问题注释中所述,可以添加构建参数块(名称可以是任意的):

ARG CACHEBUST=1 

在这样的区域之前,通过添加--build-arg CAcheBUST=$(date%s)作为docker build参数(值也可以是任意的,这里是当前日期时间,以确保其跨运行的唯一性)。

当然,这也将禁用以下所有块的缓存,因为中间图像的哈希和将不同,考虑到docker当前的工作方式,这使得真正的选择性缓存禁用成为一个非常重要的问题。

 类似资料:
  • Python 或者 Lua 语言可以在不输出二进制的情况下,将代码使用虚拟机直接执行。Go语言虽然不使用虚拟机,但可使用 指令达到同样的效果。 命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件。 下面我们准备一个 main.go 的文件来观察 的运行结果,源码如下: 这段代码的功能是将输入的参数打印出来。使用 运行这个源码文件,命令如下: $ go run ma

  • 问题内容: 我有一个模板,显示作者可以编辑/删除的各种条目。用户可以单击“删除”来删除其帖子 删除后,用户将被重定向到条目页面,但该项目仍然存在,因此需要再次重新加载页面以显示删除效果。如果我禁用缓存,问题就会消失,但是我真的很想在所有其他页面中都拥有缓存… 添加这些标签无效,我认为我的浏览器只会忽略它们 我启用缓存槽: 有什么方法可以针对特定页面禁用它吗? 编辑 如建议,我尝试使用包装器: 并将

  • 我如何在Drupal 9中禁用特定页面的缓存,我找到了一个解决方案,但它用于禁用所有页面的缓存,解决方案是:在settings.yml中添加此代码: 这是工作,但我只想禁用特定页面的缓存。谢谢。

  • 我已经定义了这个配置文件 并通过cmd运行“logstash agent-f local_config.conf”命令。 在那之后,我收到一条信息,然后超过1小时没有任何事情发生。 打印的消息:“C:\用户\杰克\桌面\logstash-1.4.2\bin 可以肯定的是,我确认配置文件存在于我在配置文件中定义的路径中。 有什么想法吗?

  • 问题内容: 我有一个创建的容器,但我不记得我用来启动它的确切命令。有什么办法可以找回吗? 这与在Docker中查看运行/停止容器的完整命令不同, 我想知道的是生成容器的完整docker命令,而不是容器内的命令。 问题答案: 通过查看的输出,您可以推断出大部分信息。 例如,您可以通过查看键来发现在容器内部启动的命令。如果我运行: 我以后可以运行: 得到: 同样,的输出还将包含有关容器中使用的Dock

  • 我有一个我创建的容器,但我记不起我用来启动它的确切的docker run命令。有什么方法可以找回吗? 这与在Docker中查看运行/停止容器的完整命令不同,我想知道的是生成容器的完整Docker命令,而不是容器中的命令。