我正在为映像编写一个Dockerfile,该映像在运行时按顺序执行以下两项操作:
问题在于ENTRYPOINT只能以单个用户身份运行(无论哪个USER设置在Dockerfile中ENTRYPOINT之前的最后一个)。在这种情况下,ENTRYPOINT只能以root用户或非root用户身份运行。
我不能将CMD命令放在ENTRYPOINT之前,因为它们只是被ENTRYPOINT覆盖。
我该如何完成我所需要的?
答案 0 :(得分:0)
您以根用户身份启动容器。这将以root身份运行您的入口点。执行所需的所有步骤,然后使最后一步看起来像这样:
exec gosu username /bin/bash
以用户/bin/bash
的身份启动username
。您可以找到gosu in this github repo。它的优点是可以运行带有隐式exec的su
命令,这样可以避免离开父进程,而这会破坏信号处理。
如果将/bin/bash
设置为CMD,则可以通过以下方法使此方法更加灵活:
exec gosu username "$@"
请确保对ENTRYPOINT和CMD使用json语法,以避免合并的命令和cli args问题。
这比sudo更可取,因为它避免了任何从用户返回到root的选项。