一、说明
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
              
        
      
评论区