She*_*ena 18 docker dockerfile
sheller RUN和CMD语句的shell形式和exec形式之间有什么区别.
例如:
RUN [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
VS:
RUN npm start
Run Code Online (Sandbox Code Playgroud)
eg2:
CMD ["python","my_script.py","argument"]
Run Code Online (Sandbox Code Playgroud)
VS:
CMD python my_script.py argument
Run Code Online (Sandbox Code Playgroud)
Mat*_*ard 25
shell形式和exec形式之间有两个不同之处.根据文档,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表单可以避免shell字符串重写,并使用不包含指定shell可执行文件的基本映像来运行RUN命令.
在shell形式中,您可以使用\(反斜杠)将单个RUN指令继续到下一行.
还有第三种形式CMD:
CMD ["param1","param2"](作为ENTRYPOINT的默认参数)
此外,CMD如果您将其用作ENTRYPOINT要覆盖的参数/参数,则需要exec表单.
| 归档时间: |
|
| 查看次数: |
9240 次 |
| 最近记录: |