主机卷中的符号链接如何在 Docker 容器中工作?
How do symlinks in a host volume work in Docker containers?
我的问题是当您从主机挂载目录中的容器内部创建 symlink 时会发生什么。举个例子问最简单
假设我们像这样启动一个容器。大多数命令都无关紧要,这里重要的是主机卷挂载。
docker run --rm -ti -h thecontainer -v /home/userguy:/container-home alpine /bin/sh
在容器中,我在主机卷目录
中创建了一个符号link
thecontainer$ ln -s /tmp /container-home/tmp-link
在容器中时,我可以 ls /container-home/tmp-link
并按预期看到容器 /tmp
的内容。
现在,如果我回到我的主机,我会看到 link /home/userguy/tmp-link -> /tmp
。如果我 ls
该目录,我会看到 主机的 /tmp
的内容。即不同的结果。
我的问题是,主机卷如何在允许这种情况下工作的幕后工作?这是 Docker 的产品还是 lxc 本身?我很惊讶地看到这项工作,因为我认为 symlinks 指向 inode 并假设容器中的 /tmp 与主机上的 /tmp 不同。
它是 OS 的虚拟文件系统层的一部分。符号链接包含名称,VFS 在访问符号链接时动态解析该名称。
指向 inode 的指针称为 链接,通常称为 "hardlinks" 以区别于符号链接。
我的问题是当您从主机挂载目录中的容器内部创建 symlink 时会发生什么。举个例子问最简单
假设我们像这样启动一个容器。大多数命令都无关紧要,这里重要的是主机卷挂载。
docker run --rm -ti -h thecontainer -v /home/userguy:/container-home alpine /bin/sh
在容器中,我在主机卷目录
中创建了一个符号linkthecontainer$ ln -s /tmp /container-home/tmp-link
在容器中时,我可以 ls /container-home/tmp-link
并按预期看到容器 /tmp
的内容。
现在,如果我回到我的主机,我会看到 link /home/userguy/tmp-link -> /tmp
。如果我 ls
该目录,我会看到 主机的 /tmp
的内容。即不同的结果。
我的问题是,主机卷如何在允许这种情况下工作的幕后工作?这是 Docker 的产品还是 lxc 本身?我很惊讶地看到这项工作,因为我认为 symlinks 指向 inode 并假设容器中的 /tmp 与主机上的 /tmp 不同。
它是 OS 的虚拟文件系统层的一部分。符号链接包含名称,VFS 在访问符号链接时动态解析该名称。
指向 inode 的指针称为 链接,通常称为 "hardlinks" 以区别于符号链接。