【问题标题】:What permissions do I need to enable for Docker volumes to work?我需要启用哪些权限才能使 Docker 卷正常工作?
【发布时间】:2015-11-04 11:32:29
【问题描述】:

假设我有一个包含一些数据的 Docker 容器。我希望这些数据持续存在 - 如果容器停止、删除、升级等。我仍然希望数据位于主机操作系统文件系统上的可访问位置。

目前,我的解决方案是在我的主机(我使用 Ubuntu 14.10)上创建一个目录 /srv/service-name,然后使用 -v /srv/service-name:/path/inside/container 参数运行我的服务。

通过反复试验,我发现有时容器无法写入此内容,因为它没有正确的权限。我发现this question 提供了纯数据容器作为解决方案。好吧,我不想使用容器,因为我正在做的事情似乎不必要地复杂。我宁愿继续使用-v 挂载目录。

那么,如何在我要挂载的目录上设置正确的权限?

【问题讨论】:

    标签: ubuntu permissions docker


    【解决方案1】:

    那么,如何在我要挂载的目录上设置正确的权限?

    Docker 卷没有什么特别之处:为了让进程写入目录,该目录的所有权和权限需要允许写入。

    默认情况下,Docker 容器中的进程以root 运行,并且几乎可以在任何地方进行写入,没有像 selinux 这样的额外限制。

    如果容器中的进程不是以 root 身份运行,则由您来确保您向容器公开的任何卷都具有适当的所有权。你基本上有两种选择:

    1. 从主机设置源目录的权限。

      如果您的进程在容器内以用户 httpd 的身份运行,您将需要确定与该用户关联的数字 UID,然后将目录 chown 确定为适当的用户 ID。例如,如果容器内的用户 httpd 是 UID 48,那么在主机上:

      chown 48 /srv/webserver
      

      如您所料,这意味着在主机上运行 ls -l 可能会返回不同的用户名,因为无法保证容器中的 UID 与主机上的 UID 匹配。

    2. ENTRYPOINT 脚​​本中设置权限

      如果您正在构建自己的镜像,您可以以root 的身份运行容器,然后使用ENTRYPOINT 脚本负责 (a) 设置所有权和权限,然后 (b) 切换到非特权用户运行您的CMD

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 2015-02-21
      • 2017-05-04
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多