我在 Ubuntu 中运行 Docker。我有一个包含以下文件夹的容器:
/opt/foo
和 /opt/bar
。我在 /opt/bar
中有一个名为 data.txt
的文件,大小为 1GB,该文件硬链接到 /opt/foo
。
我的问题是:如果我将
/opt
作为容器中的卷映射到主机上的文件夹,会发生什么情况? (例如 -v /home/me/my_opt:/opt
)我的文件是否也会作为硬链接存在于我的主机中,实际上仅占用 1 GB 空间?我的主机是否会破坏硬链接并将文件复制到两个位置,从而有效占用 2 GB?还会有什么事情发生吗?
当您进行绑定安装时,不会复制任何内容。主机上的一个路径和容器中的一个路径中存在相同的文件系统。如果您已经了解 Unix 硬链接,事实上,它非常相似,只不过它适用于整个目录树而不是单个文件。
因此,在您的示例中,只有一个 1 GB 文件。主机上的
/opt/foo/data.txt
和 /opt/bar/data.txt
以及容器中的 /home/me/my_opt/foo/data.txt
和 /home/me/my_opt/foo/bar/data.txt
引用相同的物理文件。
在本机 Linux 上直接使用 Docker 引擎更具体地说。如果您使用 Docker Desktop 或其他基于虚拟机的解决方案,则需要某种机制在主机和虚拟机之间同步文件。据我所知,这些通常不会缓存或保留文件,如果文件是硬链接的,您不应该看到差异,但直接说明所发生的情况有点困难。