管理主机和Docker容器环境中的目录权限

时间:2015-06-01 21:21:25

标签: linux permissions docker

我试图使用使用Docker容器构建的堆栈来运行Symfony2应用程序(SfDocker)。堆栈由互连的容器组成,其中ubuntu:14.04是基础:

  • mysql db
  • nginx
  • PHP-FPM

我面临的反复出现的问题是管理容器内的目录权限。当我从主机安装vloume时,例如

volumes:   
- symfony-code:/var/www/app

安装的目录将始终由root或容器内的未识别用户(仅在运行ls -al时可见的用户ID)拥有。

这实际上使得无法通过浏览器访问应用程序。当然,在公共目录上运行chown -R root:www-data可以解决问题,但是只要我想写入例如'快取'来自主机的目录(用户所在的目的地为ltarasiewicz)我得到permission denied error。最重要的是,只要在容器内运行的应用程序创建新目录(e' logs'),它们将再次归root所有,之后浏览器或我的桌面用户无法访问。

所以我的问题是:

  1. 如何管理主机和容器的权限 环境(当我想从容器上运行命令时) 环境)?
  2. 是否可以配置Docker,以便作为卷挂载的目录会自动获得特定的所有权/权限(例如' root:www-data')?
  3. 我是否可以在我的&nbspx' nginx'内自由创建新用户和用户组。从Ubuntu构建的容器:14.04图像?

1 个答案:

答案 0 :(得分:3)

一些一般性观点,如果我不直接回答您的问题,请道歉。

  • 不要在容器中以root身份运行。在Dockerfile中创建用户并使用USER语句或在入口点或命令脚本中切换到该用户。有关此问题的详细示例,请参阅Redis official image。 (所以Q3的答案是肯定的,并且可以,但是通过Dockerfile - 不要手动更改容器)。

  • 请注意,官方图片通常会chown on volumes in the entrypoint script以避免您在2中描述的此问题。

  • 考虑使用数据容器而不是直接链接到主机目录。有关详细信息,请参阅official docs

  • 不要在卷上从主机运行命令。只需创建一个临时容器来执行此操作或使用docker exec(例如docker run -v /myvol:/myvol myimage touch /myvol/x)。