【问题标题】:how manage users and groups to share data between multiple containers?如何管理用户和组以在多个容器之间共享数据?
【发布时间】:2017-04-05 09:27:17
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php apache docker ftp


    【解决方案1】:

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

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

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

    如果您以后想迷惑某人,您甚至可以在每个容器中为不同的用户名使用相同的 UID。

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多