Docker:如何在数据专用容器中设置文件所有权?
我使用数据专用容器dockerized PHP应用程序。 我用这个( docker-symfony )容器堆栈。
这是一个纯数据容器的简单定义:
FROM debian:jessie MAINTAINER Vincent Composieux <vincent.composieux@gmail.com> VOLUME /var/www/symfony
除了所有权和权限之外,一切都发挥得很好。 我注意到,当我将卷(我的本地目录)装载到纯数据容器时,已装入的文件仍然由当前用户在主机上拥有,而这些用户在容器内部未被识别。
例如,如果我使用ltarasiewicz
,并将其docker-compose up
为ltarasiewicz
,然后login到数据容器,则可以看到已装入的文件的所有权设置为:
drwxrwxr-x 7 1000 1000 4096 Jun 10 21:27 symfony
uid
和1000
gid
对应我的主机的用户uid
和gid
。 因为容器内没有这样的用户,所以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