CMD
CMD有三种形式:
- CMD [“executable”,”param1”,”param2”],exec形式(推荐方式)
- CMD [“param1”,”param2”],作为ENTRYPOINT的默认参数
- CMD command param1 param2,shell形式
一个Dockerfile只能有一个CMD,如果有多个,只有最后一个起作用。
CMD的主要目的是为执行(executing)容器提供默认命令和参数。如果不包括命令,必须执行ENTRYPOINT。 如果CMD作为ENTRYPOINT的参数,那么CMD和ENTRYPOINT都必须是JSON Array形式的。
exec形式的CMD会当作JOSN数组解析,所以只能使用双引号(”“),不能使用单引号(‘’)。
exec形式不会调用shell命令,所以不会执行shell中的变量替换比如$HOME。当然,如果一定要执行替换,可以使用如下形式的exec:
CMD ["sh", "-c", "echo $HOME"]
无论是shell形式,还是exec形式,CMD设置的命令都会在运行镜像的时候执行。
当使用shell形式时,整个命令包括参数作为一个字符串在“/bin/sh -c”中执行。