为什么 kubectl cp 命令以退出代码 126 终止?

kkp*_*eek 2 file-copying kubernetes devops kubectl

我正在尝试使用以下命令将文件从 pod 复制到本地:

kubectl cp /namespace/pod_name:/path/in/pod /path/in/local
Run Code Online (Sandbox Code Playgroud)

但是command terminates with exit code 126不会发生和复制。

同样,在使用以下命令从本地尝试到 pod 时:

kubectl cp /path/in/local /namespace/pod_name:/path/in/pod
Run Code Online (Sandbox Code Playgroud)

它引发以下错误:

OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "tar": executable file not found in $PATH: unknown

请帮助解决这个问题。

小智 18

将文件从本地文件系统复制到容器的另一种方法:

cat [local file path] | kubectl exec -i -n [namespace] [pod] -c [container] "--" sh -c "cat > [remote file path]"
Run Code Online (Sandbox Code Playgroud)


小智 14

将文件从 pod 复制到本地的有用命令

kubectl exec -n <namespace> <pod> -- cat <filename with path>  > <filename>
Run Code Online (Sandbox Code Playgroud)


cod*_*ger 7

kubectl cp实际上是一个非常小的包装器kubectl exec whatever tar c | tar x。这样做的副作用是您需要tar目标容器中的可执行文件,而您似乎没有。

通常kubectl cp最好避免,它通常只适用于奇怪的调试内容。

  • 好的!所以至少我们可以`kubectl exec无论cat c&gt; x`或`kubectl exec无论base64 c | base64 --解码 &gt; x` (2认同)

chr*_*sse 6

kubectl cp要求tar存在于您的容器中,如帮助所述:

!!!重要的提示!!!要求容器映像中存在“tar”二进制文件。如果 'tar' 不存在,'kubectl cp' 将失败。

确保您的容器中包含tar二进制文件$PATH