我有一个Dockerfile(https://gist.github.com/hasMobi/e198555704ee57e84399)依次有这两个命令:
RUN rm -frv /usr/share/nginx/html/*
RUN ls /usr/share/nginx/html/
Run Code Online (Sandbox Code Playgroud)
当我在构建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 Code Online (Sandbox Code Playgroud)
这里发生了什么?我知道每个RUN命令创建一个单独的层,一个与另一个隔离,但不是第二个RUN命令,它应该以前一个RUN命令中的确切状态继承文件系统(2个文件消失了)?
我有一个类似的问题:
RUN rm -rf /full/path
RUN ln -s /other /full/path
Run Code Online (Sandbox Code Playgroud)
这将失败,因为“/full/path”在第二次 RUN 中仍然存在。此解决方法有效:
RUN rm -rf /full/path; ln -s /other /full/path
Run Code Online (Sandbox Code Playgroud)
我不理解这种行为,但在我的情况下能够解决它。
基本上,基础镜像中的 ADD 命令会覆盖 Dockerfile 中的 RUN 命令。请参阅此了解更多信息。
注意:如果内容发生更改,第一个遇到的 ADD 指令将使 Dockerfile 中所有后续指令的缓存失效。这包括使 RUN 指令的缓存无效。有关更多信息,请参阅 Dockerfile 最佳实践指南。
您可以考虑分叉源基础映像并使用您的自定义版本。
归档时间: |
|
查看次数: |
16876 次 |
最近记录: |