使用--user或suexec和env变量运行docker容器?

时间:2019-03-10 18:36:22

标签: docker

当以非root用户身份运行docker容器时,我看到了两种方法:

  1. 执行Canvas时使用--user选项。
  2. 以超级用户身份运行docker容器(请勿使用docker run)。而是传入一些包含UID和GID的环境变量。逻辑已添加到入口点脚本中,以使用此UID启动进程。

第一个选项最简单,实际上并不需要在容器内创建用户。您只需确保对于映射的卷,主机上存在UID和GID。

第二个选项似乎更灵活,但也很难设置。据我了解,您的容器最初以root用户身份运行,从而使您有一些时间从入口点脚本执行一些一次性的初始化和设置。然后,最后使用--user或类似命令启动容器的主进程。最终在容器中运行并使用(读取和写入)您的卷的进程使用适当的UID:GID进行此操作。

基本上,选项2如下:

  1. 构建docker映像(此处不进行用户特定的设置)
  2. 以根用户身份运行映像,并指定一些包含UID和GID的环境变量。
  3. Entrypoint检查是否进行了初始设置。
  4. 脚本在容器内创建用户,并传入了明确的UID和GID
  5. 创建主目录,并递归suexec个位置来设置该用户的访问权限
  6. 运行主进程(例如某些服务器可执行文件)

选项2是最好的方法吗?我现在使用chmod作为启动服务的初始化过程。我将使用tini启动我的tini,运行上述步骤,最后在服务器进程上执行entrypoint.sh吗?

我一直在努力处理Docker中的用户设置内容。在Dockerfile中suexec没有任何意义,因为我需要UID匹配主机上有意义的内容(卷的内容也需要主机上的用户访问)。

0 个答案:

没有答案