2016-09-22 13 views
1

我搜索了文檔,但沒有出現。我知道我可以測試它,但我感覺很懶,所以爲了將來的參考和任何人誰想要顯示他們的專業知識,並贏得一些SO代表...當一個卷鏈接現有的主機和容器目錄時會發生什麼

是宿主文件夾填充容器文件夾的內容?

是不是相反?

這兩個文件夾內容是否合併? (在這種情況下:當兩個文件夾中存在同名文件時會發生什麼情況?)

還是會產生錯誤?啓動時引發的錯誤,還是當您嘗試使用VOLUME指向容器上現有的已填充文件夾構建映像時引發的錯誤?

此外,另一件事情不在文檔中:我是否必須在Dockerfile中將容器路徑定義爲VOLUME,以便在啓動容器時使用-v來對付它,或者可以隨時創建卷?

回答

4

當您從主機運行容器並裝載卷時,您在容器中看到的所有內容都是主機上的內容 - 主機目錄上的卷裝入點,因此如果映像中的目錄中有任何內容它被繞過。

從這個Dockerfile圖像:

FROM ubuntu 
WORKDIR /vol 
RUN touch /vol/from-container 
VOLUME /vol 

當你沒有主機安裝運行,圖像內容被複制到卷:

> docker run vol-test ls /vol 
from-container  

但是從主機安裝卷而你只能看到主持人的內容:

> ls $(pwd)/host 
from-host 
> docker run -v $(pwd)/host:/vol vol-test ls /vol                                                           
from-host 

不,你不需要VOLUME指令。沒有它的行爲是一樣的。

1

每當泊塢容器與安裝在主機上的體積,例如創建日期:

docker run -v /path/on/host:/data container-image 

中已有/data由於圖像生成過程總是完全丟棄的任何內容,以及任何目前是在其位置使用/path/on/host。 (如果/path/on/host不存在,則將其創建爲空目錄,但我認爲該行爲的某些方面當前可能會被棄用。)

在Dockerfile中預先定義一個包含VOLUME的卷是不必要的;所有VOLUME確實會導致從映像運行的任何容器都有一個隱含的-v /volume/path(注意缺少主機裝入路徑)參數,該參數被添加到它們的docker run命令中,如果使用明確的-v /host/path:/volume/path,則將忽略該參數。

相關問題