映射到主机时保留 Docker 容器卷中的硬链接

问题描述 投票:0回答:1

我在 Ubuntu 中运行 Docker。我有一个包含以下文件夹的容器:

/opt/foo
/opt/bar
。我在
/opt/bar
中有一个名为
data.txt
的文件,大小为 1GB,该文件硬链接到
/opt/foo

我的问题是:如果我将

/opt
作为容器中的卷映射到主机上的文件夹,会发生什么情况? (例如
-v /home/me/my_opt:/opt
)我的文件是否也会作为硬链接存在于我的主机中,实际上仅占用 1 GB 空间?我的主机是否会破坏硬链接并将文件复制到两个位置,从而有效占用 2 GB?还会有什么事情发生吗?

docker ubuntu filesystems hardlink
1个回答
0
投票

当您进行绑定安装时,不会复制任何内容。主机上的一个路径和容器中的一个路径中存在相同的文件系统。如果您已经了解 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 或其他基于虚拟机的解决方案,则需要某种机制在主机和虚拟机之间同步文件。据我所知,这些通常不会缓存或保留文件,如果文件是硬链接的,您不应该看到差异,但直接说明所发生的情况有点困难。

© www.soinside.com 2019 - 2024. All rights reserved.