基于该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 解析陷阱。