kubectl exec 失败 "container <command> is not valid for pod <pod_name>"
kubectl exec failed with "container <command> is not valid for pod <pod_name>"
我正在使用 Minikube,我有一个带有一个容器的 alpine pod。
当我 运行:
kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh
我收到一个 shell 并且我可以 运行 里面的任何命令(ifconfig
,等等)。
但是当我尝试 运行 sh
和 -c
时失败了:
root:~# kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh -c 'ifconfig'
I0722 05:45:25.091111 80392 loader.go:357] Config loaded from file /home/root/.kube/config
I0722 05:45:25.111876 80392 round_trippers.go:405] GET https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc 200 OK in 16 milliseconds
I0722 05:45:25.232564 80392 round_trippers.go:405] POST https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc/exec?command=%2Fbin%2Fsh&container=ifconfig&container=ifconfig&stdin=true&stdout=true&tty=true 400 Bad Request in 13 milliseconds
I0722 05:45:25.232921 80392 helpers.go:201] server response object: [{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc",
"reason": "BadRequest",
"code": 400
}]
F0722 05:45:25.233095 80392 helpers.go:119] Error from server (BadRequest): container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc
kubectl 将 -c
标志解释为 ifconfig
的标志,而是 kubectl exec
命令本身的标志——它指定了 Pod 的确切容器,其中命令应该被执行;这也是 kubectl
在您的 Pod 中寻找名为 "ifconfig" 的 容器 的原因。有关详细信息,请参阅 the documentation。
相反,使用 --
表示标志不应再由 kubectl exec
解释,而是传递给调用的命令(ifconfig
,在这种情况下)作为-是:
$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- /bin/sh -c 'ifconfig'
另请注意,在这种情况下,您实际上不需要从 shell 调用 ifconfig;您也可以直接调用 ifconfig
而无需使用 /bin/sh
:
$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- ifconfig
我正在使用 Minikube,我有一个带有一个容器的 alpine pod。
当我 运行:
kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh
我收到一个 shell 并且我可以 运行 里面的任何命令(ifconfig
,等等)。
但是当我尝试 运行 sh
和 -c
时失败了:
root:~# kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc /bin/sh -c 'ifconfig'
I0722 05:45:25.091111 80392 loader.go:357] Config loaded from file /home/root/.kube/config
I0722 05:45:25.111876 80392 round_trippers.go:405] GET https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc 200 OK in 16 milliseconds
I0722 05:45:25.232564 80392 round_trippers.go:405] POST https://192.168.190.143:8443/api/v1/namespaces/default/pods/alpinec1-7c65db48b4-v2gpc/exec?command=%2Fbin%2Fsh&container=ifconfig&container=ifconfig&stdin=true&stdout=true&tty=true 400 Bad Request in 13 milliseconds
I0722 05:45:25.232921 80392 helpers.go:201] server response object: [{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc",
"reason": "BadRequest",
"code": 400
}]
F0722 05:45:25.233095 80392 helpers.go:119] Error from server (BadRequest): container ifconfig is not valid for pod alpinec1-7c65db48b4-v2gpc
kubectl 将 -c
标志解释为 ifconfig
的标志,而是 kubectl exec
命令本身的标志——它指定了 Pod 的确切容器,其中命令应该被执行;这也是 kubectl
在您的 Pod 中寻找名为 "ifconfig" 的 容器 的原因。有关详细信息,请参阅 the documentation。
相反,使用 --
表示标志不应再由 kubectl exec
解释,而是传递给调用的命令(ifconfig
,在这种情况下)作为-是:
$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- /bin/sh -c 'ifconfig'
另请注意,在这种情况下,您实际上不需要从 shell 调用 ifconfig;您也可以直接调用 ifconfig
而无需使用 /bin/sh
:
$ kubectl exec -it -v=6 alpinec1-7c65db48b4-v2gpc -- ifconfig