CMD
参考:CMD
一个Dockerfile
文件仅能执行一条CMD
指令。如果存在多条CMD
指令,仅最后一个CMD
指令起作用
语法
CMD
指令有3
种书写格式:
CMD ["executable","param1","param2"]
(exec
形式,推荐)CMD ["param1","param2"]
(ENTRYPOINT
指令的默认参数)CMD command param1 param2
(shell
形式)
作用
CMD
指令的主要目的是提供容器默认操作。可以通过CMD
指定一个可执行文件,如果在Dockerfile
中指定了ENTRYPOINT
,那么CMD
指定的可执行文件会被忽略
注意:如果CMD
指令用于提供ENTRYPOINT
指令参数,那么两者必须按JSON
数组格式编写
注意:如果使用exec
格式,其将会解析成JSON
数组,所以必须使用双引号而不是单引号
调用shell
命令:
exec
形式的CMD
指令不会调用命令行shell
,所以如果要使用shell
命令,必须显示调用shell
,比如CMD [ "sh", "-c", "echo $HOME" ]
shell
形式的CMD
指令可以直接调用,比如CMD echo $HOME
调用非shell
命令,必须使用exec
形式,且使用命令绝对路径,比如CMD ["/usr/bin/wc","--help"]
如果在运行docker run
时指定了运行命令,将会覆盖CMD
指令操作
RUN vs. CMD
RUN
用于在镜像构建时运行,并提交运行结果CMD
在构建时不执行任何操作,但指定镜像的预期命令