多年来,我一直在使用 docker 进行自托管,我从未真正关心过挂载的卷,因为我没有看到与挂载文件夹相比的真正优势(我知道与权限等相关的优势,但这对我来说不是什么大问题)。
直到最近,我才发现可以通过/var/lib/docker/volumes/<volume_name>
(在 Arch 上)访问 docker 卷。这让我想到了一个问题:既然卷数据可以通过上述目录获取,那么为什么还要费心挂载目录呢?
这和我目前所采用的方法完全相反。不过,如果卷内容随时可用,我可能遇到的所有问题(编辑文件、备份……)都消失了,卷的所有优点都得到了附加值(尤其是我不需要费心维护树/etc/docker/<service>
)。
由于这听起来好得令人难以置信 - 我想了解直接访问卷数据的缺点/var/lib/docker/volumes/<volume_name>
(从系统/OS/shell 访问,而不是从 docker 本身访问)。
答案1
虽然总的来说我认为它基本上是安全的(命名卷和显式绑定挂载本质上是相同的),但这里有一些需要考虑的事项:
- 读取文件- 非常安全,因为你没有改变任何东西
- 不同的 UID/GID- 您在典型的绑定挂载中遇到了同样的问题,但文件的 UID 和 GID 在容器内有不同的分配。这意味着如果您在主机端弄乱了文件权限,容器内的服务可能无法访问这些文件。
- 进入
/var/lib/docker/volumes
- 非 root 用户无法访问/var/lib/docker/volumes
,但该用户可以访问绑定挂载的其他目录。 - 现有目录- 有时您想要在主机上挂载现有目录而不是将其复制到卷,例如应在主机和容器之间共享的卷。
- 单个文件挂载- 有点相关,但单个文件挂载(例如
-v /etc/hosts:/etc/hosts
)显然不能使用命名卷。
我不熟悉这/etc/docker/<service>
棵树(也许那是 Arch 的事情?)。