Sup*_*est 3 permissions ubuntu docker
假设我有一个保存一些数据的 Docker 容器。我希望这些数据能够持续存在 - 如果容器被停止、删除、升级等。我仍然希望数据位于主机操作系统文件系统上的可访问位置。
目前,我的解决方案是在我的主机上创建一个目录/srv/service-name(我使用 Ubuntu 14.10),然后使用参数运行我的服务-v /srv/service-name:/path/inside/container。
通过反复试验,我发现有时容器无法写入此内容,因为它没有正确的权限。我发现这个问题,其中仅提供数据容器作为解决方案。好吧,我不想使用容器,因为它对于我正在做的事情来说似乎不必要地复杂。我宁愿继续用-v.
那么,如何为正在挂载的目录设置正确的权限呢?
那么,如何为正在挂载的目录设置正确的权限呢?
Docker 卷没有什么特别之处:为了让进程写入目录,该目录的所有权和权限需要允许写入。
默认情况下,Docker 容器中的进程在几乎任何地方运行root并且能够在任何地方进行写入,而无需像 selinux 这样的东西施加额外的限制。
如果容器中有一个进程不是以root 身份运行,则您需要确保向容器公开的任何卷都具有适当的所有权。你基本上有两个选择:
设置主机对源目录的权限。
如果您的进程在容器内以用户身份运行httpd,您将需要确定与该用户关联的数字 UID,然后chown确定相应用户 ID 的目录。例如,如果httpd容器内的用户 UID 48,则在主机上:
chown 48 /srv/webserver
Run Code Online (Sandbox Code Playgroud)
正如您可能期望的那样,这意味着ls -l在主机上运行可能会返回不同的用户名,因为无法保证容器中的 UID 与主机上的 UID 匹配。
ENTRYPOINT在脚本中设置权限
如果您正在构建自己的映像,则可以将容器作为 运行root,然后使用一个ENTRYPOINT脚本负责 (a) 设置所有权和权限,然后 (b) 切换到非特权用户来运行您的CMD.