我正在使用一个将运行 ZooKeeper 的容器,但我在安装到容器中的主机卷上遇到了权限问题。
这是我的设置:
在主机上(Ubuntu 14.04):
- 创建了“zookeeper”系统用户(id=106)和组(id=111)。
- 创建目录“/var/log/zookeeper”并将其所有权设置为zookeeper(即chownzookeeper:zookeeper)。这是我将安装到容器中的目录。
容器内部(Ubuntu 14.04):
- 还创建了一个“zookeeper”系统用户(id=102)和组(id=105),我将其用作在 ENTRYPOINT 中执行命令的用户。
- 创建将安装到的相同目录“/var/log/zookeeper”,并将其所有权设置为zookeeper:zookeeper(尽管我认为这并不重要)。
一旦我使用 /var/log/zookeeper 挂载启动容器,并以 Zookeeper 用户(在容器内创建)的身份打开容器内部的 shell,我发现如果出现“权限被拒绝”错误,我尝试在挂载目录/var/log/zookeeper 中创建一个文件。当我执行“ls -l”来查看此目录的所有权(仍在容器内)时,它看起来像这样:
drwxr-xr-x 2 106 111 4096 Jun 30 17:18 zookeeper
本例中的 106 和 111 对应于主机的 Zookeeper 用户和组 ID,我认为这就是问题所在。我尝试在容器内打开一个 shell,但这次我以 root 用户身份进入,并且我上面描述的场景工作得很好,只是 root 是创建的文件的所有者(这是预期的)。
由此我得出的结论是我需要:
(a)作为默认 root 用户而不是我创建的 Zookeeper 用户在我的容器内运行应用程序。
(b)在我的主机和容器内创建一个 Zookeeper 用户和组,其 id 完全相同。
这两种情况都不是理想的,因为(a),以 root 用户身份运行应用程序可能会存在潜在的安全问题(根据我所读到的内容),并且(b),要使 id 匹配可能非常困难,因为它们可能已被创建的其他用户占用(您对此没有任何控制权)。
以前有人处理过类似的事情吗?还有其他可能被我忽略的解决方案吗?
据我所知,容器内和主机上的用户 ID 和组 ID 应该匹配,以便让主机授予您对共享目录的权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)