我有一个Dockerfile(https://gist.github.com/hasMobi/e198555704ee57e84399)按顺序有这两个命令:
RUN rm -frv /usr/share/Nginx/html/*
RUN ls /usr/share/Nginx/html/
当我在构建hte图像的同时查看控制台时,我可以清楚地看到从该文件夹中删除了2个文件,但是当下一个RUN命令到来时,它列出了目录的内容并且文件仍在那里?:
Step 6 : RUN rm -fry /usr/share/Nginx/html/*
---> Running in b9a69992e4e0
removed '/usr/share/Nginx/html/index.html'
removed '/usr/share/Nginx/html/index.PHP'
---> 2bfe01cbd007
Removing intermediate container b9a69992e4e0
Step 7 : RUN is /usr/share/Nginx/html/
---> Running in 08396f6029e1
index.html
index.PHP
---> a6471052519d
这里发生了什么?据我所知,每个RUN命令创建一个单独的层,一个与另一个隔离,但不是第二个RUN命令,它应该以前一个RUN命令中的确切状态继承文件系统(2个文件消失了)?
最佳答案
基本上,来自基本映像的ADD命令会覆盖Dockerfile中的RUN命令.有关更多信息,请参见this.
原文链接:https://www.f2er.com/docker/436871.htmlNote: The first encountered ADD instruction will invalidate the cache for all following instructions from the Dockerfile if the contents of have changed. This includes invalidating the cache for RUN instructions. See the Dockerfile Best Practices guide for more information.
您可以考虑分支源基础映像并使用您的自定义版本.