dockerfile 中的 entrypoint 和 cmd

2021-05-21  本文已影响0人  癞痢头

ENTRYPOINT 指令

ENTRYPOINT 指令可以有两种写法:

CMD 指令

CMD 指令有三种形式:

exec form 和 shell form 隐含规则

例如:


ENTRYPOINT [nginx]
CMD ['-g', 'daemon off;']

运行 docker run -i -t --rm -p 80:80 nginx, 会执行 nginx -g "daemon off"
运行 docker run -i -t --rm -p 80:80 nginx nginx -t, 则执行 nginx -t

ENTRYPOINT [ "echo", "$HOME" ]  ## 不会解析 $HOME 变量
ENTRYPOINT [ "sh", "-c", "echo $HOME" ] ## 会解携 $HOME 变量

ENTRYPOINT 和 CMD 的配合使用形式

两者的关系图如下:


entrypoint-vs-cmd

shell 中 source,sh,和exec的区别

shell form不推荐的原因在于不能接收signal信号, 再深究其原因,在于 shell三种执行命令方式的不同

shell 执行脚本或命令有三种:

使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。

sh script.sh 

使用$ source script.sh方式,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell。

source script.sh
exec command 

使用exec command方式,会用command进程替换当前shell进程,并且保持PID不变。执行完毕,直接退出,不回到之前的shell环境。

以上几种形式的不同点在于 :

subshell 对signal等信号是没有反应的

参考
上一篇 下一篇

猜你喜欢

热点阅读