ENTRYPOINT和CMD一样都拥有两种form:exec form、shell form
exec form
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT在“exec form”下可以和CMD合用,须要把稳CMD也必须是“exec form”,此时CMD中的内容充当ENTRYPOINT中可实行命令的参数,比如下面:

FROM ubuntuENTRYPOINT ["top", "-b"]CMD ["-c"]
容器运行时,输出指令是“top -b -c”。
履历:将固定的args写到ENTRYPOINT,将易变的args写到CMD,比如上面“-c”便是易变的args,如果要覆盖它的内容,运行镜像时加上新的args即可,如下:
docker run -it --rm --name test top -H
这样末了实行到的便是“top -b -H”
“exec form”下,不能自动解析环境变量,由于解析环境变量是shell的功能,办理这个问题也不难,将shell作为ENTRYPOINT的executable部分,实际实行命令作为shell的args:
ENTRYPOINT [ "/bin/sh", "-c", "echo $HOME" ]
或者直接写一个script,以“#!/bin/sh”开头
shell form
格式,
ENTRYPOINT command param1 param2
利用这种运行办法,可以正常解析环境变量,但不能和CMD合用了,举例:
ENTRYPOINT curlCMD ["http://www.example.com/"]
输出指令会是“curl”
简要先容ENTRYPOINT指令,希望能帮到你!