一个名为Docker的卷挂载后会获得哪些权限?

8

我正在尝试使用自docker 1.9以来的新命名卷。它们应该取代仅数据容器。然而,我在以下用例中难以使用命名卷:

我有几个容器以某个非root用户(称为appuser)运行应用程序。我在我派生所有应用程序容器映像的基映像中修复了uid和gid。每个应用程序将日志文件写入由appuser拥有的文件夹。然后,我设置了一个仅数据容器,从同一基映像派生。使用volumes-from指令,我挂载此仅数据容器以存储我的日志文件。这有效是因为uid已固定。

相反,如果我尝试使用命名卷,则应用程序无法写入其日志文件,因为命名卷由某个依赖于卷驱动程序(我的情况下为“local”驱动程序的xfs用户)的用户拥有。是否可能使用正确的权限在命名卷中创建日志文件夹?

或更一般地说,如果挂载命名卷的容器中的应用程序以非root用户身份运行,则命名卷有用吗?从上面我刚描述的内容来看,这样的应用程序将无法写入或创建命名卷中的任何文件夹。


这可能是与卷驱动程序有关的问题。我建议先尝试使用“local”驱动程序。我相信这个驱动程序没有用户权限的问题。 - dnephin
我一直在使用“local”驱动程序。 - Ulrich Schuster
1个回答

9

根据我的经验,似乎命名卷始终被挂载为 root
我检查了命名卷以找到主机文件夹,然后更改了主机文件夹上的一些权限,直到直接挂载主机文件夹时将其作为非 root 用户挂载。

-v /var/lib/docker/volumes/builds/:/mnt/build

我理解

[user@d5003c91f6d1 ~]$ ll /mnt
total 4
drwxr-xr-x 2 user user 4096 Sep 18 19:29 build

但是如果我回到使用同名的卷

-v builds:/mnt/build

然后我得到
[user@42f237282128 ~]$ ll /mnt
total 4
drwxr-xr-x 2 root root 4096 Sep 18 19:29 build

我曾经提出这个问题,以找到一种改变这个的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接