Dockerfile CMD shell与exec的forms
docker RUN和CMD语句的shellforms和execforms有什么区别。
例如:
RUN [ "npm", "start" ]
VS:
RUN npm start
eg2 :
CMD ["python","my_script.py","argument"]
VS:
CMD python my_script.py argument
shell表单和exec表单有两个区别。 根据文件,执行表格是首选的forms。 这是两个不同之处:
exec表单被parsing为一个JSON数组,这意味着你必须在单词中使用双引号(“)而不是单引号(')。
与shellforms不同,execforms不会调用命令shell。 这意味着正常的shell处理不会发生。 例如,CMD [“echo”,“$ HOME”]不会在$ HOME上进行variablesreplace。 如果你想要shell处理,那么要么使用shell的forms,要么直接执行一个shell,例如:CMD [“sh”,“-c”,“echo $ HOME”]。 当使用exec表单并直接执行一个shell时,就像在shell表单的情况下一样,shell是在执行环境variables扩展,而不是docker。
这里有一些额外的细节是:
execforms使得可以避免shellstring转换,并使用不包含指定的shell可执行文件的基本映像运行命令。
在shellforms中,可以使用\(反斜杠)将单个RUN指令继续到下一行。
CMD
还有第三种forms:
CMD [“参数1”,“参数2”](作为默认参数ENTRYPOINT)
https://docs.docker.com/engine/reference/builder/#run
https://docs.docker.com/engine/reference/builder/#cmd