Kubernetes指定docker的Entrypoint
下表给出了 Docker 与 Kubernetes 中对应的字段名称。
如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:
如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其参数。
如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令, Docker 镜像中自带的命令及其参数会被忽略。
如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。
如果在容器配置中同时设置了 command 与 args,那么 Docker 镜像中自带的命令及其参数会被忽略。 容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。
Docker的Entrypoint和CMD
Docker建议使用ENTRYPOINT来设置镜像的主命令,然后再使用CMD指令来提供默认的参数。如果CMD用于给ENTRYPOINT提供默认的参数,那么CMD和ENTRYPOINT指令都应该以JSON数组的形式来定义。
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
Docker官网的定义:
An ENTRYPOINT allows you to configure a container that will run as an executable.
The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
如果docker run没有指定任何的执行命令或者dockerfile里面也没有ENTRYPOINT,那么,就会使用CMD 指定的默认的执行命令执行。所以CMD作为默认行为是可以被ENTRYPOINT覆盖的。