Docker:如何在仅数据容器中设置文件所有权?

时间:2015-06-11 07:03:32

标签: docker dockerfile docker-compose

我使用仅数据容器对PHP应用程序进行了docker化。我使用了这个(docker-symfony)容器堆栈。

这是仅数据容器的简单定义:

FROM debian:jessie
MAINTAINER Vincent Composieux <vincent.composieux@gmail.com>
VOLUME /var/www/symfony

除了所有权和权限之外,一切都很好。我注意到,当我将卷(我的本地目录)挂载到仅数据容器时,挂载的文件仍由主机上的当前用户拥有,而该容器在容器内无法识别。

例如,如果我使用docker-compose up作为ltarasiewicz启动容器,然后我登录数据容器,我可以看到已挂载的文件的所有权设置为:< / p>

drwxrwxr-x 7 1000 1000 4096 Jun 10 21:27 symfony

uid的{​​{1}}和gid与我的主机用户1000uid相对应。由于容器内没有此类用户,因此仅显示gid目录的ID。这使得无法运行应用程序。

所以我的问题是如何将卷安装到仅数据容器并为挂载的文件分配正确的所有权,例如symfony或我选择的其他任何用户。

1 个答案:

答案 0 :(得分:2)

使用用于运行应用程序的相同图像来制作数据容器。例如,如果要创建postgresql数据库,请使用postgres映像作为数据容器:

$ docker run --name dc postgres echo "Data Container"

此命令创建了数据容器并退出 - 请注意,数据容器不会继续运行。

对于postgres,在您使用该卷启动数据库之前,不会正确设置卷所有权:

$ docker run -d --volumes-from dc postgres

但是其他图像将在Dockerfile中正确设置所有权。

当然,如果您只想修复数据容器中的权限,只需安装它并运行chown:

$ docker run --volumes-from dc postgres chown -R postgres:postgres /var/lib/postgresql/data