主机卷中的符号链接如何在Docker容器中工作?

我的问题是关于从主机挂载的目录中的容器内创build符号链接时会发生什么。 如果我只是问一个例子,这是最简单的。

假设我们像这样开始一个容器。 大部分命令并不重要,这里重要的是主机卷装载。

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

在容器中,我在主机卷目录中创build一个符号链接

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

在容器中,我可以ls /container-home/tmp-link并根据预期查看容器的/tmp的内容。

现在,如果我回到我的主机,我看到/home/userguy/tmp-link -> /tmp 。 如果我在那个目录下看到主机的 /tmp的内容。 即不同的结果。

我的问题是,主机卷如何在允许这种情况发挥作用的封面下工作? 这是Docker还是lxc本身的产品? 我很惊讶地看到这个工作,因为思想符号链接指向inode,容器中的/ tmp将与主机上的/ tmp不同。

它是操作系统的虚拟文件系统层的一部分。 符号链接包含名称,当访问符号链接时,VFS会dynamicparsing该名称。

指向inode的指针称为链接 ,通常称为“硬链接 ”,以将它们与符号链接区分开来。