【发布时间】:2020-04-02 12:33:50
【问题描述】:
我对下面的命令有点困惑:
kubectl run busybox --image=busybox --restart=Never -o yaml --dry-run -- /bin/sh -c 'echo hello;sleep 3600'
YAML:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: busybox
name: busybox
spec:
containers:
- args:
- /bin/sh
- -c
- echo hello;sleep 3600
image: busybox
name: busybox
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
我知道如果我们不指定参数--command,那么--之后的参数将被视为参数。
但我想知道,/bin/sh -c "echo hello;sleep 3600" 在发生争论时是如何工作的?根据 Kubernetes 文档(https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes),如果我们只在 POD 中指定参数,那么 docker EntryPoint 将用作 EntryPoint 命令。因此,将在 docker 映像中执行的结果命令将是 Docker EntryPoint + kubectl arguments。
由于 Busybox DockerFile 不包含任何 EntryPoint(https://github.com/docker-library/busybox/blob/master/musl/Dockerfile),因此只会使用 kubectl 命令中指定的参数,因此命令如下所示:
/bin/sh -c 'echo hello;sleep 3600'
如果我们指定--command,那么根据 Kubernetes 文档,DockerFile arguments(CMD) 和 command(EntryPoint) 都将被 kubectl 命令中指定的命令覆盖,所以它看起来类似于上面:
/bin/sh -c 'echo hello;sleep 3600'
所以最后还是一样的。
【问题讨论】:
标签: kubernetes arguments command kubectl busybox