我试图使用使用Docker容器构建的堆栈来运行Symfony2应用程序(SfDocker)。堆栈由互连的容器组成,其中ubuntu:14.04是基础:
我面临的反复出现的问题是管理容器内的目录权限。当我从主机安装vloume时,例如
volumes:
- symfony-code:/var/www/app
安装的目录将始终由root
或容器内的未识别用户(仅在运行ls -al
时可见的用户ID)拥有。
这实际上使得无法通过浏览器访问应用程序。当然,在公共目录上运行chown -R root:www-data
可以解决问题,但是只要我想写入例如'快取'来自主机的目录(用户所在的目的地为ltarasiewicz
)我得到permission denied error
。最重要的是,只要在容器内运行的应用程序创建新目录(e' logs'),它们将再次归root
所有,之后浏览器或我的桌面用户无法访问。
所以我的问题是:
答案 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
)。