如何缓存结果/层,但仍在Dockerfile中运行命令?

如何缓存结果/层,但仍在Dockerfile中运行命令?,docker,dockerfile,Docker,Dockerfile,我在Dockerfile中有一个非常长时间运行的命令,但是如果我保存结果并再次运行它,它会非常快。因此,我的目标是在每次构建时运行命令和缓存,这样我可以确定自己是最新的,但我也可以从以前的缓存中获益 我尝试过以下方法: RUN node ./node_modules/geoip-lite/scripts/updatedb.js ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipca

我在Dockerfile中有一个非常长时间运行的命令,但是如果我保存结果并再次运行它,它会非常快。因此,我的目标是在每次构建时运行命令和缓存,这样我可以确定自己是最新的,但我也可以从以前的缓存中获益

我尝试过以下方法:

RUN node ./node_modules/geoip-lite/scripts/updatedb.js
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
RUN node ./node_modules/geoip-lite/scripts/updatedb.js
一开始是这样的。但一旦数据库得到更新,第二次运行将永远持续下去,因为第一次运行层现在已经过时,不再缓存

因此,如果我可以指定该命令应始终在前一个缓存层上运行,它将非常有效


谢谢

您如何决定是否需要重新运行该命令?这种情况需要多久发生一次?我每次都需要运行它!但是在上一次缓存的结果之上,您需要决定是从头开始(长)运行还是从缓存(短)运行它?这与Docker层缓存相同还是不同的缓存?听起来你总是想使用层缓存(快,因为它不运行命令),也总是想运行命令(本质上慢)。当缓存层过时时,updatedb只会花费很长时间!所以偶尔会需要很长时间,但这是绝对必要的。如果在需要很长时间时缓存结果,那么后续构建将非常快。但是如果我不运行这个命令,我就不知道数据库什么时候过时了,如果我不缓存,构建将花费永远的时间。。。