尝试以非root用户身份从容器内部写入已装入的卷时出现问题

Lui*_*ina 5 permissions docker ubuntu-14.04 apache-zookeeper

我正在使用一个将运行ZooKeeper的容器,但是我遇到了关于我装入容器的主机卷的权限问题.

这是我的设置:

在主机上(Ubuntu 14.04):

  • 创建了"zookeeper"系统用户(id = 106)和组(id = 111).
  • 创建目录"/ var/log/zookeeper"并将其所有权设置为zookeeper(即chown zookeeper:zookeeper).这是我将安装到容器中的目录.

容器内部(Ubuntu 14.04):

  • 还创建了一个"zookeeper"系统用户(id = 102)和group(id = 105),我将其用作在ENTRYPOINT中执行命令的用户.
  • 创建将要挂载的相同目录"/ var/log/zookeeper",并将其所有权设置为zookeeper:zookeeper(虽然我认为这不重要).

一旦我使用/ var/log/zookeeper mount启动我的容器,我在容器内部打开一个shell作为zookeeper用户(在容器内创建),我发现我得到一个"Permission Denied"错误,如果我尝试在挂载目录/ var/log/zookeeper中创建一个文件.当我执行"ls -l"查看此目录的所有权(仍然在容器内)时,它看起来像这样:

drwxr-xr-x 2  106  111   4096 Jun 30 17:18 zookeeper
Run Code Online (Sandbox Code Playgroud)

在这种情况下,106和111对应于主机的zookeeper用户和组ID,我认为这是问题所在.我尝试在容器内部打开一个shell,但这次我以root用户身份进入,上面描述的场景完全正常,只是root是创建的文件的所有者(这是预期的).

由此我得出结论,我需要:

(a)在我的容器内运行应用程序作为默认的root用户,而不是我创建的zookeeper用户.

(b)在我的主机上和id完全相同的容器内创建一个zookeeper用户和组.

这两种情况都不理想,因为对于(a),以root用户身份运行应用程序可能存在潜在的安全问题(从我已经阅读过的内容),对于(b),要使id匹配到期可能非常困难事实上,他们可能已被其他已创建的用户(您无法控制)使用.

有没有人曾经处理过这样的事情?我可能会忽略其他可能的解决方案吗?

yeg*_*256 4

据我所知,容器内和主机上的用户 ID 和组 ID 应该匹配,以便让主机授予您对共享目录的权限。