我正在编写一个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环境变量的命令。
1条答案
按热度按时间k4emjkb11#
kubectl exec
用于执行正在运行的容器中的可执行文件。该命令必须内置到容器中。builtin
和cd
都不是您容器中有效可执行文件只有/bin/bash
是要执行内置shell命令,必须执行shell并将其作为命令参数调用,如第三个示例所示。