创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其入参。如果要**设置命令**,就填写在配置文件的 command 字段下,如果要设置**命令的入参**,就填写在配置文件的 args 字段下。**一旦 Pod 创建完成,该命令及其入参就无法再进行更改了。**

command: ["printenv"]

args: ["HOSTNAME", "KUBERNETES_PORT"]

这两行可以实现覆盖DockerFile中的ENTRYPOINT功能。具体的**command代表ENTRYPOINT的命令行**,而**args代表具体参数**。

**如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:**

如果command和args均没有写,那么用Docker默认的配置。

如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。

如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。

如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。

下面是prometheus:v2.16.0镜像中的CMD和ENTRYPOINT

`docker image inspect e935122ab143`

```

"Env": [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"Cmd": [

"--config.file=/etc/prometheus/prometheus.yml",

"--storage.tsdb.path=/prometheus",

"--web.console.libraries=/usr/share/prometheus/console_libraries",

"--web.console.templates=/usr/share/prometheus/consoles"

],

"ArgsEscaped": true,

"Image": "sha256:0a0d465929e42cdae24889984d2de89db8d9baa618704dd3baef077ac4ddd9f1",

"Volumes": {

"/prometheus": {}

},

"WorkingDir": "/prometheus",

"Entrypoint": [

"/bin/prometheus"

],

```

以下是我希望在k8s中运行的prometheus使用的参数

```

- args:

- --storage.tsdb.retention.time=15d

- --config.file=/etc/config/prometheus.yml

- --storage.tsdb.path=/data

- --web.console.libraries=/etc/prometheus/console_libraries

- --web.console.templates=/etc/prometheus/consoles

- --web.enable-lifecycle

```

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐