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

Docker: how to set up file ownership in a data-only container?

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

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

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

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

例如,如果我以 docker-compose up 作为 ltarasiewicz 启动容器,然后我登录到数据容器,我可以看到已安装文件的所有权设置为:

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

uidgid of 1000对应我主机的用户uidgid。因为容器内没有这样的用户,所以只显示 symfony 目录的 ID。这使得无法 运行 应用程序。

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

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

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

此命令创建了数据容器并退出了 - 请注意,数据容器没有留下 运行ning。

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

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

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

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

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