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