Docker 具有不同用户的单个容器定义

Docker 具有不同用户的单个容器定义,docker,Docker,由于种种原因,我们有两个网络。在网络A上,应该在容器中执行进程的用户可能是usera。在网络B上,用户可能是userb。用户的uid/gid必须与ldap定义相匹配,并且这些定义都是定义良好的。进程编写了持久性文件来绑定SAN上装载的目录(每个网络上显然有不同的SAN),因此进程所有者很重要 如果只有一个用户,我将执行以下操作: FROM <base image> RUN groupadd -g 999 usera && useradd -u 999 -g 999 u

由于种种原因,我们有两个网络。在网络A上,应该在容器中执行进程的用户可能是usera。在网络B上,用户可能是userb。用户的uid/gid必须与ldap定义相匹配,并且这些定义都是定义良好的。进程编写了持久性文件来绑定SAN上装载的目录(每个网络上显然有不同的SAN),因此进程所有者很重要

如果只有一个用户,我将执行以下操作:

FROM <base image>
RUN groupadd -g 999 usera && useradd -u 999 -g 999 usera
USER usera
CMD ["process", "'params"]
来自
运行groupadd-g999 usera&&useradd-u999-g999 usera
用户usera
CMD[“进程”,“参数”]
然后运行的进程将由usera拥有,一切都会很好

但是,如果可以构建一个容器就好了,但是在容器启动时,可以通过一些参数设置用户

我怀疑这可能是通过将
入口点添加到docker文件中,然后可能通过
docker run-e USER=[usera | userb]
发送值来实现的,但我只是在加快docker的速度,所以我不确定这到底是如何工作的

我已经看过了,它给出了一些建议。此外,我们绝对不能让容器作为root运行。我还查看了,它提供了一个关于可能通过
-e
发送值的提示,但是关于生成系统和运行系统上的id不匹配的警告不适用

我如何可能通过传递一个值来实现拥有一个进程的不同用户(不过,如果我有一个足够复杂的脚本,我可以检测容器在哪个网络上运行,并且我可以自动设置一些变量)

编辑:由于审核和审查要求,如果能够确保用户设置(或者如果没有提供设置,则无法启动),而不是使用
--user
参数来运行
docker
,则会更干净。尽管如此,如果唯一/最好的方法是
--user
,那么就这样吧。

您有两个选择:

  • 以root用户身份运行脚本(这将是入口点),将UID/GID作为环境变量传递,使用
    usermod | groupmod
    更改用户/组id,然后使用新用户执行实际进程。检查gogs/gogs图像,查看可以自定义UID/GID的容器的名称

  • 使用docker run命令上的开关,以便进程以正确的UID/GID开始。您不需要使用此选项在Dockerfile上创建用户,因为UID将被命令行中的UID覆盖

第二种方法的问题是,您必须事先准备好文件系统权限,因为一旦进程启动,您就无法访问/chmod。

您有两种选择:

  • 以root用户身份运行脚本(这将是入口点),将UID/GID作为环境变量传递,使用
    usermod | groupmod
    更改用户/组id,然后使用新用户执行实际进程。检查gogs/gogs图像,查看可以自定义UID/GID的容器的名称

  • 使用docker run命令上的开关,以便进程以正确的UID/GID开始。您不需要使用此选项在Dockerfile上创建用户,因为UID将被命令行中的UID覆盖


第二种方法的问题是,您必须事先准备文件系统权限,因为一旦进程启动,您就不能使用chown/chmod。

您可以在进程启动时检查有效uid,如果为零(root),则中止,确保进程不以root身份运行。您可以在进程启动时检查有效uid,如果为零(root),则中止,以确保进程不以root身份运行。