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