我正在为一个映像编写一个 Dockerfile,该映像在运行时按顺序执行以下两件事:
问题是 ENTRYPOINT 只能作为单个用户运行(以 Dockerfile 中 ENTRYPOINT 之前最后设置的 USER 为准)。在这种情况下,ENTRYPOINT 只能以 root 或非 root 用户身份运行。
我不能将 CMD 命令放在 ENTRYPOINT 之前,因为它们只会被 ENTRYPOINT 覆盖。
我怎样才能完成我需要的事情?
您以 root 身份启动容器。这将以 root 身份运行您的入口点。执行您需要的所有步骤,然后使最后一步如下所示:
exec gosu username /bin/bash
Run Code Online (Sandbox Code Playgroud)
/bin/bash以用户身份启动username。您可以在此 github 存储库中找到 gosu 。它的优点是使用su隐式 exec 运行命令,从而避免离开可能破坏信号处理的父进程。
如果您设置/bin/bashCMD 的值,则可以通过以下方式使其更加灵活:
exec gosu username "$@"
Run Code Online (Sandbox Code Playgroud)
确保对 ENTRYPOINT 和 CMD 使用 json 语法,以避免合并命令和 cli 参数出现问题。
这比 sudo 更可取,因为它避免了从用户返回到 root 的任何选项。
| 归档时间: |
|
| 查看次数: |
4429 次 |
| 最近记录: |