如何管理用户和组在多个容器之间共享数据?

时间:2017-04-05 09:27:18

标签: php apache docker ftp

我们正在尝试整合一些旧的未记录的PHP Web应用程序。为了使应用程序可以在环境之间移植,我们将它们集装箱化。我们不应该更改代码,除了一些配置文件。

我们使用了一个自定义php-5.4-apache容器,将主机文件夹安装到/var/www/html以提供Web应用程序。 apache服务器以www-data用户身份运行。 entrypoint配置为在/var/www/html文件夹上设置正确的文件夹和文件权限,并将所有权更改为www-data

其中一个网络应用程序通过Http上传图像,然后使用Ftp和someUser凭据将其移动到其他文件夹。这要求我们有一个运行Ftp服务器的附加容器。

问题是文件已正确上传,但之后无法使用Ftp移动它们。权限似乎有问题。

我们的假设是,如果Ftp服务器和Http服务器在同一台机器下托管,我们应该在同一组www-data下拥有someUsersomeGroup个用户。并且/var/www/html内容应由anyUser:someGroup拥有。

当Ftp和Http服务器在不同的容器中运行并且数据是从主机挂载时,我们如何实现这一目标呢?

1 个答案:

答案 0 :(得分:0)

文件的基础UID和GID从主机到容器,因此您只需在任何地方设置用户或组时匹配ID号。用户/组的名称实际上没有任何影响,除非您的理智。

在这种情况下,您需要确保该组在具有相同GID的两个容器中都可用,并且创建的文件组可写。

 addgroup --gid 5001 somegroup
 adduser --disabled-password --uid 5001 --gid 5001 someuser

如果您希望将来混淆某人,您甚至可以在每个容器中使用相同的UID来表示不同的用户名。

网络adduser --disabled-password --uid 5001 www-data
FTP adduser --disabled-password --uid 5001 someUser

然后,两个用户都可以在共享卷上读取和写入与UID匹配相同的文件,但这可能不是一个特别明显的解决方案。