kubernetes 为什么在使用Kubectl exec时找不到shell内置程序

zynd9foi  于 2022-12-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(234)

我正在编写一个bash脚本,从运行Debian的Kubernetes pod中复制文件。当我包含以下行时:

kubectl --namespace "$namesp" exec "$pod" -c "$container" -- cd /var

它会出错:

OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "cd": executable file not found in $PATH: unknown
command terminated with exit code 126

我也试过

kubectl --namespace "$namesp" exec "$pod" -c "$container" -- builtin
kubectl --namespace "$namesp" exec "$pod" -c "$container" -it -- cd /var

其给出相同的结果。
我通过将命令更改为以下内容解决了此问题:

kubectl --namespace "$namesp" exec "$pod" -c "$container" -- /bin/bash -c "builtin"

我很想了解为什么第一个命令不起作用,而第二个命令起作用。我认为内置命令是一组总是可以找到的命令,而不是依赖PATH环境变量的命令。

k4emjkb1

k4emjkb11#

kubectl exec用于执行正在运行的容器中的可执行文件。该命令必须内置到容器中。
builtincd都不是您容器中有效可执行文件只有/bin/bash
要执行内置shell命令,必须执行shell并将其作为命令参数调用,如第三个示例所示。

相关问题