什么是命令的shell形式和exec形式? 我仔细阅读了几份文档,以明确了解shell形式和exec形式。但是所有人都对我感到困惑。任何人都可以帮助找出这两种形式之间的区别吗?
PS :尽管我在查阅docker文件Instructions(ex: RUN, CMD, ENTRYPOINT)时遇到了这些术语,但我想总体上了解它们之间的区别,而不是在Docker上下文中。
ex: RUN, CMD, ENTRYPOINT
泊坞窗shell语法(这仅仅是一个字符串作为RUN,ENTRYPOINT和CMD)将运行字符串作为参数/bin/sh -c。这为您提供了一个外壳程序,用于将变量,子命令,管道输出,链接命令链接在一起,以及其他方便的外壳程序。
RUN
ENTRYPOINT
CMD
/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的串联。