为啥 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 > x
或kubectl 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 终止?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Kubernetes 容器中安装 tar 二进制文件以使 kubectl cp 工作?
Xcode 11 Beta 7 命令 PhaseScriptExecution 失败,退出代码非零([CP] Copy Pods Resources)