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

Posted

技术标签:

【中文标题】为啥 kubectl cp 命令以退出代码 126 终止?【英文标题】:Why does kubectl cp command terminates with exit code 126?为什么 kubectl cp 命令以退出代码 126 终止? 【发布时间】:2021-07-09 06:34:44 【问题描述】:

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

kubectl cp /namespace/pod_name:/path/in/pod /path/in/local

但是command terminates with exit code 126 和复制没有发生。

使用以下命令尝试从本地到 pod 时类似:

kubectl cp /path/in/local /namespace/pod_name:/path/in/pod

它会抛出以下错误:

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

请帮助解决这个问题。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

不错!所以至少我们可以kubectl exec whatever cat c > xkubectl exec whatever base64 c | base64 --decode > x【参考方案2】:

kubectl cp 要求 tar 出现在您的容器中,正如帮助所述:

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

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

【讨论】:

这就是我的解决方案! TYVM!【参考方案3】:

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

cat [local file path] | kubectl exec -i -n [namespace] [pod] -c [container] "--" sh -c "cat > [remote file path]"

【讨论】:

以上是关于为啥 kubectl cp 命令以退出代码 126 终止?的主要内容,如果未能解决你的问题,请参考以下文章

kubectl cp 命令使用

k8s kubectl复制命令曝目录遍历漏洞

为啥它停止并以退出代码 11 结束?

如何在我的 Kubernetes 容器中安装 tar 二进制文件以使 kubectl cp 工作?

06-kubectl常见命令整理

Xcode 11 Beta 7 命令 PhaseScriptExecution 失败,退出代码非零([CP] Copy Pods Resources)