Ami*_*kar 6 command arguments busybox kubernetes kubectl
我对以下命令有点困惑:
kubectl run busybox --image=busybox --restart=Never -o yaml --dry-run -- /bin/sh -c 'echo hello;sleep 3600'
Run Code Online (Sandbox Code Playgroud)
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: {}
Run Code Online (Sandbox Code Playgroud)
我知道如果我们不指定 parameter --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 将用作入口点命令。因此,将在 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 参数(CMD)和命令(EntryPoint)都将被 kubectl 命令中指定的命令覆盖,因此它看起来与上面类似:
/bin/sh -c 'echo hello;sleep 3600'
所以最终会是一样的。
小智 11
要从命令行修改命令和参数,请使用以下命令:
kubectl run nginx --image=nginx --command -- sleep 1000
Run Code Online (Sandbox Code Playgroud)
另一个相同的例子:
kubectl run nginx --image=nginx --command -- python myapp.py
Run Code Online (Sandbox Code Playgroud)
如果您只想覆盖一个参数(而不是命令本身),则为:
kubectl run nginx --image=nginx -- 1000 #(sending the 1000 seconds to
sleep)
Run Code Online (Sandbox Code Playgroud)
在 Kubernetes 中使用容器时,您应该小心不要混淆 Kubenetescommand
和 Docker Cmd
。
command
在Kubernetes字段对应于EntryPoint
在多克尔场args
在Kubernetes字段对应于Cmd
在多克尔场来自Kubernets 文档:
当您覆盖默认的
Entrypoint
and 时Cmd
,这些规则适用:
如果您不提供
command
或args
容器,则使用 Docker 映像中定义的默认值。如果您为 Container提供 a
command
但没有args
,则仅使用提供command
的。Docker 镜像中定义的默认值EntryPoint
和默认值Cmd
将被忽略。如果您只
args
为一个 Container 提供,Entrypoint
则 Docker 镜像中定义的默认值将与args
您提供的一起运行。如果您提供
command
andargs
,则忽略 Docker 映像中定义的默认值Entrypoint
和默认值Cmd
。你command
的运行与你的args
.
小智 6
在这个例子中,是的,两者都是一样的。假设一个入口点(命令)被设置为sleep 1000
但如果你的参数被设置为sleep 3000
那么容器命令将被忽略并被sleep 3000
执行。
args 优先于命令,如果 args 存在,则覆盖命令值
归档时间: |
|
查看次数: |
12091 次 |
最近记录: |