docker RUN和CMD语句的shell形式和exec形式之间有什么区别。Dockerfile CMD shell与exec形式
例如:
RUN [ "npm", "start" ]
VS:
RUN npm start
EG2:
CMD ["python","my_script.py","argument"]
VS:
CMD python my_script.py argument
docker RUN和CMD语句的shell形式和exec形式之间有什么区别。Dockerfile 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表单被解析为JSON数组,这意味着您必须在单词中使用双引号(“)而非单引号(')。
与shell窗体不同,exec窗体不会调用命令shell。这意味着正常的shell处理不会发生。例如,CMD [“echo”,“$ HOME”]不会在$ HOME上执行变量替换。如果你想要shell处理,那么要么使用shell的形式,要么直接执行一个shell,例如:CMD [“sh”,“-c”,“echo $ HOME”]。当使用exec表单并直接执行一个shell时(如shell格式的情况),它是在执行环境变量扩展的shell,而不是docker。
一些额外这里微妙之处是:
的EXEC形式使得能够避免壳串改写(munging),并运行使用不包含指定壳可执行基本图像的命令。
在shell形式中,您可以使用\(反斜杠)将单个RUN指令继续到下一行。
还为CMD
第三种形式:
CMD [ “参数1”, “参数2”](作为默认参数入口点)
https://docs.docker.com/engine/reference/builder/#run
https://docs.docker.com/engine/reference/builder/#cmd