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

我使用数据专用容器dockerized PHP应用程序。 我用这个( docker-symfony )容器堆栈。

这是一个纯数据容器的简单定义:

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

除了所有权和权限之外,一切都发挥得很好。 我注意到,当我将卷(我的本地目录)装载到纯数据容器时,已装入的文件仍然由当前用户在主机上拥有,而这些用户在容器内部未被识别。

例如,如果我使用ltarasiewicz ,并将其docker-compose upltarasiewicz ,然后login到数据容器,则可以看到已装入的文件的所有权设置为:

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

uid1000 gid对应我的主机的用户uidgid 。 因为容器内没有这样的用户,所以symfony目录只显示ID。 这使得运行该应用程序是不可能的。

所以我的问题是如何将卷挂载到仅限数据的容器,并将正确的所有权分配给挂载的文件,例如root:www-data或其他我select的用户。

使用与运行应用程序相同的图像来制作数据容器。 例如,如果你想创build一个postgresql数据库,请为你的数据容器使用postgres映像:

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

这个命令创build了数据容器并退出 – 注意数据容器没有保持运行。

在postgres的情况下,直到您使用该卷启动数据库,卷的所有权才会正确设置:

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

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

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

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