k8s的command和args配置Docker入口命令

首先来说说dockerfile中的ENTRYPOINT,官方是这么解释的: 
An ENTRYPOINT allows you to configure a container that will run as an executable. 
 即它可以让你的容器功能表现得像一个可执行程序一样,当容器被创建后,这条命令就会被执行。一般的ENTRYPOINT的格式是:

ENTRYPOINT ["executable", "param1", "param2"] (the preferred exec form) 
ENTRYPOINT command param1 param2 (shell form) 
  • 1
  • 2

 总之就是一个命令带上若干个参数,这是Docker的用法。 
 入口命令给容器创建带来了一些灵活性,如果在k8s中想要覆盖DockerFile中的入口命令,自己重新定义入口命令是否可以呢?答案是肯定的,看下面一段.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

 这是一个创建Pod的配置,在containers节点下,有如下两行

    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  • 1
  • 2

 这里,从字面意思不难看出,这两行可以实现覆盖DockerFile中的ENTRYPOINT功能。具体的command代表ENTRYPOINT的命令行,而args代表具体参数。 
 当用户同时写了commandargs的时候自然是可以覆盖DockerFile中ENTRYPOINT的命令行和参数,那么对于具体情况呢,比如仅仅写了command或者args的时候呢?完整的情况分类如下:

  • 如果commandargs均没有写,那么用Docker默认的配置。
  • 如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
  • 如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args
  • 如果如果commandargs都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值