2016-03-12 17 views
6

我有一个Dockerfile具有在序列这两个命令(https://gist.github.com/hasMobi/e198555704ee57e84399):Dockerfile - 除去在一个RUN命令文件时,它仍然存在于下一个RUN命令

RUN rm -frv /usr/share/nginx/html/* 
RUN ls /usr/share/nginx/html/ 

当我看在控制台同时建立兴田形象,我可以清楚地看到从该文件夹中取出2个文件,但在接下来的运行指令到来时,它会列出该目录的内容和文件仍然存在?:

enter image description here

这是怎么回事在这?据我所知,每个RUN命令创建一个单独的层和一个从另一分离,但不应该继承文件系统的准确状态,这是在前面的运行命令(第二RUN命令与所述2个文件消失)?

+0

如果您要将dockerfile的第12行更改为:'RUN rm -frv/usr/share/nginx/html/* && ls/usr/share/nginx/html /',您会得到什么输出结果?只是想,如果这个问题是在命令中隔离开来,或者如果它是在你的图像层不会彼此 – CtheGood

+1

的顶部正确构建我遇到了同样的问题,并最终意识到,我试图删除文件中定义作为由基本图像Dockerfile的体积内,从而使体积因此得到在每一个层重新创建。 从[Docker文档](https://docs.docker.com/engine/reference/builder/#volume):'如果任何构建步骤在声明后更改了卷中的数据,那些更改将会是丢弃“。 –

回答

1

基本上,从基本图像的ADD命令重写在Dockerfile的RUN命令。有关更多信息,请参阅this

注意:如果内容发生更改,第一次遇到的ADD指令将使Dockerfile中所有后续指令的缓存无效。这包括使RUN指令的缓存无效。有关更多信息,请参阅Dockerfile最佳实践指南。

您可以考虑分叉源代码图像并使用您的自定义版本。

+0

Dockerfile:https://gist.github.com/hasMobi/e198555704ee57e84399 结果:http://prntscr.com/aeng43 与'Dockerfile'相同的文件夹中我唯一存在的其他文件是/ code/index.html,里面有一个“Hello world”文本。我的最终目标是只有这出现在'在/ usr /共享/ nginx的/ HTML /'文件。但是index.php似乎在每个RUN命令的'html'文件夹内被恢复。 –

+0

通过我在Windows上使用泊坞v1.10.3的方式。 –

+0

如果您尝试将第12行更改为:'RUN rm -frv/usr/share/nginx/html/* && ls/usr/share/nginx/html /',您会得到什么输出?只是试图隔离问题是否与您的命令一致,或者是否与图像中的图层不正确地相互叠加。 – CtheGood

1

我有一个类似的问题:

RUN rm -rf /full/path 
    RUN ln -s /other /full/path 

失败的原因是“/全/路径”上的第二次运行仍然存在。此变通办法:

RUN rm -rf /full/path; ln -s /other /full/path 

我不明白的行为,但能够解决它在我的情况。

相关问题