docker scrap 容器如何在没有 shell 的情况下运行我的应用程序?

docker scrap 容器如何在没有 shell 的情况下运行我的应用程序?

基于该scratch镜像的 docker 容器缺少 shell。

那么它如何运行我放入其中的二进制文件呢?

答案1

shell 仅需要运行 shell 脚本或提供交互式 shell 会话。运行二进制文件的容器不需要其中任何一个;它执行给定的二进制文件入口点(如果在表单中指定exec)不使用 shell。

容器设置不需要 shell。 shell 没有什么特别的,它是一个像其他任何东西一样的二进制文件;容器运行时为容器设置“上下文”,任何二进制文件都在其中运行。

为了能够在没有 shell 的情况下构建和运行容器,您需要确保运行命令的所有容器指令(ENTRYPOINT上文提到的,RUN等)都使用exec表格,IE

ENTRYPOINT ["executable", "arg1", "arg2"]

而不是外壳形式

ENTRYPOINT executable arg1 arg2

后者依赖于 shell,如果/bin/sh(或配置为 的 shell SHELL)不可用,则失败。

除了不需要 shell 之外,该exec形式还有许多优点:值得注意的是,它简化了信号处理并避免了许多 shell 解析陷阱。

相关内容