docker 命名卷在挂载时获得哪个权限?

Ulr*_*ter 8 file-permissions docker docker-compose

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

我有几个容器以非 root 用户身份运行应用程序,称之为 appuser;我确实修复了我的基础镜像中的 uid 和 gid,所有应用程序容器镜像都来自该镜像。每个应用程序将日志文件写入 appuser 拥有的文件夹。然后,我设置了一个仅用于数据的容器,该容器源自相同的基本映像。使用volumes-from 指令,我挂载这个纯数据容器来存储我的日志文件。它有效,因为 uid 是固定的。

相反,如果我尝试使用命名卷,应用程序将无法写入它们的日志文件,因为命名卷归某些依赖于卷驱动程序(在我的情况下为“本地”)驱动程序的用户所有。是否可以在命名卷中创建具有正确权限的日志文件夹?

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

Hil*_*kus 9

根据我的经验,当root
我检查命名卷以查找主机文件夹然后更改主机文件夹的几个权限时,似乎命名卷总是被挂载,直到挂载主机文件夹直接将其挂载为非 root 使用

-v /var/lib/docker/volumes/builds/:/mnt/build
Run Code Online (Sandbox Code Playgroud)

我得到

[user@d5003c91f6d1 ~]$ ll /mnt
total 4
drwxr-xr-x 2 user user 4096 Sep 18 19:29 build
Run Code Online (Sandbox Code Playgroud)

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

-v builds:/mnt/build
Run Code Online (Sandbox Code Playgroud)

然后我得到

[user@42f237282128 ~]$ ll /mnt
total 4
drwxr-xr-x 2 root root 4096 Sep 18 19:29 build
Run Code Online (Sandbox Code Playgroud)

我问这个问题是为了找到一种方法来改变这一点