sheller RUN和CMD语句的shell形式和exec形式之间有什么区别.
例如:
RUN [ "npm","start" ]
VS:
RUN npm start
EG2:
CMD ["python","my_script.py","argument"]
VS:
CMD python my_script.py argument
The exec form is parsed as a JSON array,which means that you must use double-quotes (“) around words not single-quotes (‘).
Unlike the shell form,the exec form does not invoke a command shell. This means that normal shell processing does not happen. For example,CMD [ “echo”,“$HOME” ] will not do variable substitution on $HOME. If you want shell processing then either use the shell form or execute a shell directly,for example: CMD [ “sh”,“-c”,“echo $HOME” ]. When using the exec form and executing a shell directly,as in the case for the shell form,it is the shell that is doing the environment variable expansion,not docker.
这里还有一些细微之处:
The exec form makes it possible to avoid shell string munging,and to RUN commands using a base image that does not contain the specified shell executable.
In the shell form you can use a \ (backslash) to continue a single RUN instruction onto the next line.
CMD
还有第三种形式:
CMD [“param1″,”param2”] (as default parameters to ENTRYPOINT)
此外,如果您将其用作要覆盖的ENTRYPOINT的参数/参数,则CMD需要该exec表单.