Dockerfile CMD Shell与exec形式

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

RUN [ "npm", "start" ]

vs:

RUN npm start

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表单。

以上是 Dockerfile CMD Shell与exec形式 的全部内容, 来源链接: utcz.com/qa/431222.html

回到顶部