在Dockerfile

时间:2016-02-24 17:14:29

标签: docker yum dockerfile

在我的Dockerfile中,我可能有一个看起来像这样的步骤来安装一些软件包。

Run yum install pkg1 pkg2 -y &&\
yum -y clean all

问题在于,当我不止一次构建容器时,Docker看到这个命令没有改变,也从不运行它。它选择使用以前缓存的图层。

但是,pkg1或pkg2可能已在yum存储库中更新并需要更新,并且由于它使用的是缓存的docker层,因此容器不会收到更新的包。

我可以使用--no-cache选项构建,但这会使所有缓存层无效,这会大大减慢容器构建速度,因为通常我的yum install命令接近我的Dockerfiles的末尾。

处理此问题的最佳策略是什么?如果缓存vs repo中有不同版本的软件包,是否有任何解决方案只能使docker缓存失效?

1 个答案:

答案 0 :(得分:0)

从" Build cache",您可以在ADD命令之前插入COPYRUN指令(虚拟文件)。

每当您想要使下一个RUN的缓存无效时,请修改虚拟文件的内容,以及ADD / COPY(与{{1}的其余部分一起修改}命令)不依赖缓存。