我们正在尝试整合一些旧的未记录的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
下拥有someUser
和someGroup
个用户。并且/var/www/html
内容应由anyUser:someGroup
拥有。
当Ftp和Http服务器在不同的容器中运行并且数据是从主机挂载时,我们如何实现这一目标呢?
答案 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匹配相同的文件,但这可能不是一个特别明显的解决方案。