当前位置: 首页 > 面试题库 >

Dockerfile CMD Shell与exec形式

萧繁
2023-03-14
问题内容

docker RUN和CMD语句的shell形式和exec形式之间有什么区别?

例如:

RUN [ "npm", "start" ]

vs:

RUN npm start

eg2

CMD ["python","my_script.py","argument"]

vs:

CMD python my_script.py argument

问题答案:

Shell窗体和exec窗体之间有两个区别。根据文档,exec形式是首选形式。这是两个区别:

exec形式被解析为JSON数组,这意味着您必须在单词而非单引号(’)周围使用双引号(“)。

与shell表单不同,exec表单不会调用命令shell。这意味着正常的外壳处理不会发生。例如,CMD [“ echo”,“ $ HOME”]不会在$
HOME上进行变量替换。如果要进行外壳处理,则可以使用外壳形式或直接执行外壳,例如:CMD [“ sh”,“-c”,“ echo $
HOME”]。当使用exec表单并直接执行shell时(例如在shell表单中),是由shell进行环境变量扩展,而不是docker。

这里还有一些其他的细微之处:

exec表单可以避免破坏shell字符串,并使用不包含指定shell可执行文件的基本映像运行RUN命令。

在shell形式中,可以使用\(反斜杠)将一条RUN指令继续到下一行。

还有第三种形式CMD

CMD [“ param1”,“ param2”](作为ENTRYPOINT的默认参数)

此外,CMD如果您要将exec表单用作ENTRYPOINT要覆盖的参数/参数,则需要exec表单。



 类似资料:
  • 问题内容: 什么是命令的shell形式和exec形式? 我仔细阅读了几份文档,以明确了解shell形式和exec形式。但是所有人都对我感到困惑。任何人都可以帮助找出这两种形式之间的区别吗? PS :尽管我在查阅docker文件Instructions()时遇到了这些术语,但我想总体上了解它们之间的区别,而不是在Docker上下文中。 问题答案: 泊坞窗shell语法(这仅仅是一个字符串作为,和)将

  • 问题内容: 我努力理解之间的区别和… 我一直习惯于执行服务器端命令,何时使用? 是否只是一个速记?较少的参数似乎是同一件事。 问题答案: 以字符串形式返回所有输出流。默认情况下返回输出的最后一行,但是可以将所有输出作为指定为第二个参数的数组提供。

  • 「Allen 谈 Docker 系列」 DaoCloud 正在启动 Docker 技术系列文章,每周都会为大家推送一期真材实料的精选 Docker 文章。主讲人为 DaoCloud 核心开发团队成员 Allen(孙宏亮),他是 InfoQ 「Docker 源码分析」专栏作者,已出版《Docker 源码分析》一书。Allen 接触 Docker 近两年,爱钻研系统实现原理,及 Linux 操作系统。

  • exec() 方法 用于检索字符串中的正则表达式的匹配。 语法: RegExpObject.exec( string ) 参数说明: string - 要检索的字符串 返回值: 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 说明: exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方

  • 描述 (Description) 此函数执行系统命令(直接,不在shell中)并且永​​远不会返回到调用脚本,除非指定的命令不存在且已直接调用,而不是通过shell间接调用。 该操作如下 - 如果只有一个标量参数不包含shell元字符,则该参数将转换为列表,并且该命令将直接执行,而不包含shell。 如果只有一个包含shell元字符的标量参数,那么参数将通过标准shell执行,通常是Unix上的/

  • EXEC 执行所有事务块内的命令。 假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。 可用版本: >= 1.2.0 时间复杂度: 事务块内所有命令的时间复杂度的总和。 返回值: 事务块内所有命令的返回值,按命令执行