2016-03-12 30 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 

我不明白的行爲,但能夠解決它在我的情況。

相關問題