侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 212 篇文章
  • 累计创建 81 个标签
  • 累计收到 160 条评论

K8S - command、args 的区别

汪洋
2022-11-15 / 0 评论 / 4 点赞 / 1,304 阅读 / 2,604 字

一、说明

command、args 两项实现覆盖 Dockerfile 中 ENTRYPOINT 的功能,具体的command 命令代替 ENTRYPOINT 的命令行,args 代表集体的参数

  • 如果 command 和 args 均没有指定,那么则使用 Dockerfile 的配置
  • 如果 command 没有指定,但指定了 args,那么 Dockerfile 中配置的ENTRYPOINT 的命令行会被执行,并且将 args 中填写的参数追加到 ENTRYPOINT 中
  • 如果 command 指定了,但 args 没有写,那么 Dockerfile 默认的配置会被忽略,执行输入的 command(不带任何参数,当然 command 中可自带参数)
  • 如果 command 和 args 都指定了,那么 Dockerfile 的配置被忽略,执行 command 并追加上 args 参数

二、实验演示

实验镜像

[root@node01 ~]# cat Dockerfile 
FROM busybox
CMD ["p in cmd"]
ENTRYPOINT ["echo"]

command 和 args 均没有指定,那么则使用 Dockerfile 的配置

[root@node01 ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-busybox-command-args
  labels:
    name: pod-busybox-command-args
spec:
  containers:
  - name: busybox
    image: test:v1
    imagePullPolicy: IfNotPresent
[root@node01 ~]# kubectl  apply -f pod.yaml 
kupod/pod-busybox-command-args created

[root@node01 ~]# kubectl  get pod
NAME                       READY   STATUS              RESTARTS   AGE
pod-busybox-command-args   0/1     ContainerCreating   0          2s

[root@node01 ~]# kubectl  get pod
NAME                       READY   STATUS      RESTARTS     AGE
pod-busybox-command-args   0/1     Completed   1 (2s ago)   4s

[root@node01 ~]# kubectl logs pod-busybox-command-args
p in cmd

command 没有指定,但指定了 args,那么 Dockerfile 中配置的ENTRYPOINT 的命令行会被执行,并且将 args 中填写的参数追加到 ENTRYPOINT 中

apiVersion: v1
kind: Pod
metadata:
  name: pod-busybox-command-args
  labels:
    name: pod-busybox-command-args
spec:
  containers:
  - name: busybox
    image: test:v1
    imagePullPolicy: IfNotPresent
    args:
    - /bin/sh
    - -c
    - sleep 3600
[root@node01 ~]# kubectl  apply -f pod.yaml 
pod/pod-busybox-command-args created

[root@node01 ~]# kubectl  get pod
NAME                       READY   STATUS      RESTARTS     AGE
pod-busybox-command-args   0/1     Completed   1 (1s ago)   3s

[root@node01 ~]# kubectl  logs pod-busybox-command-args
/bin/sh -c sleep 3600

如果 command 指定了,但 args 没有写,那么 Dockerfile 默认的配置会被忽略,执行输入的 command(不带任何参数,当然 command 中可自带参数)

[root@node01 ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-busybox-command-args
  labels:
    name: pod-busybox-command-args
spec:
  containers:
  - name: busybox
    image: test:v1
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]
[root@node01 ~]# kubectl  apply -f pod.yaml 
pod/pod-busybox-command-args created

[root@node01 ~]# kubectl  get pod 
NAME                       READY   STATUS    RESTARTS   AGE
pod-busybox-command-args   1/1     Running   0          4s

[root@node01 ~]# kubectl  logs pod-busybox-command-args 

如果 command 和 args 都指定了,那么 Dockerfile 的配置被忽略,执行 command 并追加上 args 参数

[root@node01 ~]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-busybox-command-args
  labels:
    name: pod-busybox-command-args
spec:
  containers:
  - name: busybox
    image: test:v1
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh"]
    args: ["-c","sleep 3600"]
[root@node01 ~]# kubectl  apply -f pod.yaml 
kupod/pod-busybox-command-args created

[root@node01 ~]# kubectl  get pod
NAME                       READY   STATUS    RESTARTS   AGE
pod-busybox-command-args   1/1     Running   0          3s

[root@node01 ~]# kubectl  logs pod-busybox-command-args
0

评论区