在 Docker 设置中管理文件权限

在 Docker 设置中管理文件权限

我有三个不同的docker容器,它们有不同的用途。它们都需要读写同一个文件区域。

  • 第一个容器从互联网获取文件并将其存储到/storage/prepared文件夹中
  • 第二个容器“监听”此文件夹并处理下载的文件。然后移动他们/storage/finished
  • 第三个容器运行一个 Web 服务器,让我根据需要将这些文件下载到我的计算机中。

当我将存储从 NAS 移至某个新的本地存储时,出现了当前问题。NAS 已安装cifs,因此所有内容都是可读/写的(安装映射为 root@nas,我知道,现在不介意这一点……)。但现在,第一个容器将所有内容存储为 host root:root,出于某种原因,第二个容器决定不想读取主机上只有 root 访问权限的任何内容。

我是否应该创建一个单独的用户并将其用于 Docker 容器(我该怎么做?)。还有也想访问这些文件,但我有自己的用户,我应该让所有组都可以访问,并将我自己和 docker 用户添加到同一个组吗?(如何使每个新文件和文件夹在创建时都可组读取并获得一定的组所有权?)

我对 Linux 的了解足以让人感到危险(例如上面的 root 安装),但这超出了我的了解范围。但我想学习 :)

答案1

您可以使用 groupadd/useradd 在容器中添加用户,并为容器设置用户:

RUN groupadd -g 2000 appgroup && useradd -g appgroup -u 2000 appuser
USER appuser

当您这样做时,容器将使用已定义用户的 ID 运行。在容器之外(在绑定挂载目录中),容器中的代码创建的文件将归您使用 groupadd/useradd 定义的数字 ID 所有。请小心,因为即使数字 ID 可以有不同的名称,它们在容器内部和外部也是相同的。

当然,如果多个容器以相同的 ID 运行,它们应该能够共享文件。

相关内容