2015-10-15 46 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

这是正确的。 –

相关问题