ENTRYPOINT 入口点_笔记

Dockerfile中的ENTRYPOINT

打包好后的Docker镜像,要变成动态运行的容器,书写Dockerfile时需要使用ENTRYPOINT或者CMD,本文主要介绍ENTRYPOINT指令。

ENTRYPOINT和CMD一样都拥有两种form:exec form、shell form

exec form

ENTRYPOINT [&#;executable&#;, &#;param1&#;, &#;param2&#;]

ENTRYPOINT在“exec form”下可以和CMD合用,需要注意CMD也必须是“exec form”,此时CMD中的内容充当ENTRYPOINT中可执行命令的参数,比如下面:

FROM ubuntu
ENTRYPOINT [&#;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 curl
CMD [&#;http://www.example.com/&#;]

输出指令会是“curl”

简要介绍ENTRYPOINT指令,希望能帮到你!

原文链接:,转发请注明来源!