linux - 主机卷中的符号链接(symbolic link)如何在 Docker 容器中工作?

标签 linux docker lxc

我的问题是当您从主机挂载目录中的容器内部创建符号链接(symbolic link)时会发生什么。如果我只问一个例子,这是最简单的。

假设我们像这样启动一个容器。大多数命令都无关紧要,这里重要的是主机卷挂载。

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

在容器中时,我在主机卷目录中创建了一个符号链接(symbolic link)

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

在容器中时,我可以 ls/container-home/tmp-link 并按预期看到容器 /tmp 的内容。

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

我的问题是,主机卷如何在允许这种情况发生的幕后工作?这是 Docker 还是 lxc 本身的产品?我很惊讶地看到这项工作,因为我认为符号链接(symbolic link)指向 inode 并假设容器中的/tmp 与主机上的/tmp 不同。

最佳答案

它是操作系统虚拟文件系统层的一部分。符号链接(symbolic link)包含名称,VFS 在访问符号链接(symbolic link)时动态解析该名称。

指向 inode 的指针称为链接,通常称为“硬链接(hard link)”以区别于符号链接(symbolic link)。

关于linux - 主机卷中的符号链接(symbolic link)如何在 Docker 容器中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33138840/

相关文章:

c - 如何创建 "object"的唯一副本并进行测试

java - 帮助在 Linux 上启动 Java 应用程序

linux - centos7容器不断重启

linux - LXC:是来自linuxcontainers.org还是Linux内核的一部分?

linux - 如何从控制台 linux 运行文件关联的应用程序

python - 哪个 Linux 发行版默认附带 python 2.6?

docker - ConnectionError : Error -3 connecting to redis:6379. 再试一次

docker - 如何通过命令行从 docker hub 删除 docker 镜像?

mysql - 使用 LAMP 堆栈备份和恢复 LXC 容器 - MySQL 无法在容器中启动

docker - minimesos中的 “containersol/minimesos”图片是什么?