如何管理用户和组在多个容器之间共享数据?
我们正在尝试整合一些旧的未记录的PHP网络应用程序。为了使这些应用程序可以在不同的环境之间移植,我们将它们集成到一起我们不应该改变代码,除了一些配置文件。如何管理用户和组在多个容器之间共享数据?
我们使用了一个自定义的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
和someUser
用户在同一组someGroup
。而且/var/www/html
内容应归anyUser:someGroup
所有。
当Ftp和Http服务器运行在不同的容器中并且数据从主机挂载时,我们如何实现这一目标?
文件中的底层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的比赛在同一个文件,但是这可能不是一个特别明显的解决方案。