由于某些原因,我们有两个网络。在网络A上,应该在容器中执行该过程的USER可能是 usera 。在网络B上,用户可能是 userb 。用户的uid / gid必须与ldap定义匹配,并且定义良好。进程写入了一些永久文件来绑定SAN上的挂载目录(显然每个网络上都有一个不同的SAN),因此进程所有者很重要。
如果只有一个USER,我将执行以下操作:
FROM <base image>
RUN groupadd -g 999 usera && useradd -u 999 -g 999 usera
USER usera
CMD ["process", "'params"]
然后运行的进程将由usera拥有,一切都会很好。
但是,如果可以构建一个容器,那将是很好的选择,但是在容器启动时,必须通过一些参数来设置用户。
我怀疑可以通过在Dockerfile中添加ENTRYPOINT
,然后通过docker run -e USER=[usera|userb]
发送值来实现,但是我只是想跟上Docker的发展,所以我不确定到底该如何工作。
我查看了processes in containers should not run as root,其中提供了一些建议。另外,我们绝对不能让容器以root身份运行。我还查看了Docker Replicate UID/GID in container,它提供了有关可能通过-e
发送值的提示,但有关构建系统和运行系统上的id不匹配的警告并不适用。
如何通过传递一个值来实现这个拥有不同进程的用户(尽管,如果我可以拥有足够复杂的脚本,那么我可以检测到容器在哪个网络上运行,并且可以设置一些变量)自动)?
编辑:由于审核和审查的要求,如果可以确保用户设置(或者如果未提供用户设置则无法启动),而不使用例如--user
参数,则将更加干净。到docker run
。尽管如此,如果唯一/最好的方法是--user
,那就这样吧。