2015-10-15 56 views
1

我的問題是關於從主機掛載的目錄中的容器內創建符號鏈接時發生的情況。如果我只是問一個例子,這是最簡單的。主機卷中的符號鏈接如何在Docker容器中工作?

假設我們像這樣開始一個容器。大部分命令無關緊要,這裏重要的是主機卷裝載。

docker run --rm -ti -h thecontainer -v /home/userguy:/container-home alpine /bin/sh 

而在容器創建在主機卷目錄

thecontainer$ ln -s /tmp /container-home/tmp-link 

符號鏈接雖然在容器中,我可以ls /container-home/tmp-link,我看到容器的/tmp的內容符合市場預期。

現在,如果我回到我的主機,我看到鏈接/home/userguy/tmp-link -> /tmp。如果我在ls那個目錄中看到主機的內容/tmp。即不同的結果。

我的問題是,主機卷如何在允許此情況發揮作用的封面下工作?這是Docker還是lxc本身的產品?我很驚訝地看到這個工作,因爲思想符號鏈接指向inode並且容器中的假設/ tmp將與主機上的/ tmp不同。

回答

1

它是操作系統虛擬文件系統層的一部分。符號鏈接包含一個名稱,當訪問符號鏈接時,VFS會動態解析該名稱。

指向inode的指針稱爲鏈接,通常稱爲「硬鏈接」來區分它們與符號鏈接。

+0

好的,我不確定軟鏈接是否也引用了inode。所以符號鏈接只包含一個路徑,並且在讀取時解析該路徑。因此,我所看到的行爲只是符號鏈接如何工作的一個函數? –

+0

這是正確的。 –

相關問題