docker - docker命名卷在挂载时获得什么权限?

标签 docker file-permissions docker-compose

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

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

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

或者更一般地说 - 如果安装命名卷的容器中的应用程序以非 root 用户身份运行,命名卷有什么好处吗?根据我上面的描述,此类应用程序将无法在指定卷中写入或创建任何文件夹。

最佳答案

根据我的经验,命名卷似乎总是挂载为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

我问this question找到一种方法来改变这一点

关于docker - docker命名卷在挂载时获得什么权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35758733/

相关文章:

php - 无法使用 Docker 访问在主机上找到的文件(无法打开流 : Connection timed out)

java - Jersey Grizzly HTTP 服务器在容器 docker 内关闭

docker-compose - Traefik docker-compose 仅​​创建一个前端路由而不是 3 个

python - 如何使用在 docker 容器中运行的 python 脚本创建(dockerized)Elasticsearch 索引?

docker - 如何测试docker卷?

docker - proxyconnect tcp:x509:证书对Sachith有效,对myregistry无效

linux - Ant中能否修改linux文件权限

php - Laravel Sail 数据库和用户未创建

Java 安全管理器

c++ - 使用 QFileDialog 在 Ubuntu 上仅显示目录和可执行文件