一尘不染

什么是shell形式和exec形式?

docker

什么是命令的shell形式和exec形式?
我仔细阅读了几份文档,以明确了解shell形式和exec形式。但是所有人都对我感到困惑。任何人都可以帮助找出这两种形式之间的区别吗?

PS :尽管我在查阅docker文件Instructions(ex: RUN, CMD, ENTRYPOINT)时遇到了这些术语,但我想总体上了解它们之间的区别,而不是在Docker上下文中。


阅读 902

收藏
2020-06-17

共1个答案

一尘不染

泊坞窗shell语法(这仅仅是一个字符串作为RUNENTRYPOINTCMD)将运行字符串作为参数/bin/sh -c。这为您提供了一个外壳程序,用于将变量,子命令,管道输出,链接命令链接在一起,以及其他方便的外壳程序。

RUN ls * | grep $trigger_filename || echo file missing && exit 1

exec语法只是运行包含的args提供的二进制文件,而没有外壳解析的任何功能。在docker中,您可以使用json格式的数组来表明这一点。

RUN ["/bin/app", "arg1", "arg2"]

exec语法的优点是从启动的进程中删除了shell,这可能会抑制信号处理。使用/bin/sh -cShell语法重新格式化命令可能还会破坏入口点和cmd的串联。

2020-06-17