lonix Asked: 2023-08-06 09:32:40 +0800 CST2023-08-06 09:32:40 +0800 CST 2023-08-06 09:32:40 +0800 CST docker scrap 容器如何在没有 shell 的情况下运行我的应用程序? 772 基于该scratch镜像的 docker 容器缺少 shell。 那么它如何运行我放入其中的二进制文件呢? linux 1 个回答 Voted Best Answer Stephen Kitt 2023-08-06T15:23:33+08:002023-08-06T15:23:33+08:00 shell 仅需要运行 shell 脚本或提供交互式 shell 会话。运行二进制文件的容器不需要其中任何一个;它执行作为入口点给出的二进制文件(如果在exec表单中指定),而不使用 shell。 为了能够在没有 shell 的情况下构建和运行容器,您需要确保运行命令(ENTRYPOINT上面提到的RUN等)的所有容器指令都使用以下exec形式,即 ENTRYPOINT ["executable", "arg1", "arg2"] 而不是外壳形式 ENTRYPOINT executable arg1 arg2 后者依赖于 shell,如果/bin/sh(或配置为 的 shell SHELL)不可用,则失败。 除了不需要 shell 之外,该exec形式还有许多优点:值得注意的是,它简化了信号处理并避免了许多 shell 解析陷阱。
shell 仅需要运行 shell 脚本或提供交互式 shell 会话。运行二进制文件的容器不需要其中任何一个;它执行作为入口点给出的二进制文件(如果在
exec
表单中指定),而不使用 shell。为了能够在没有 shell 的情况下构建和运行容器,您需要确保运行命令(
ENTRYPOINT
上面提到的RUN
等)的所有容器指令都使用以下exec
形式,即而不是外壳形式
后者依赖于 shell,如果
/bin/sh
(或配置为 的 shellSHELL
)不可用,则失败。除了不需要 shell 之外,该
exec
形式还有许多优点:值得注意的是,它简化了信号处理并避免了许多 shell 解析陷阱。