如何在Kubernetes容器中安装tar二进制文件使kubectl cp命令正常运行
kubectl cp 容器无tar工具报错解决方案
根本原因
kubectl cp 命令的底层实现依赖本地环境和目标容器内均预装tar工具,执行拷贝时会先调用本地tar打包待传输文件,再调用容器内的tar完成解包。你遇到的报错就是目标容器的PATH路径下无tar可执行文件导致的,报错原文及翻译如下:
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: "tar": executable file not found in $PATH"
(中文翻译:RPC错误,错误码2:OCI运行时错误,执行失败:container_linux.go:235:启动容器进程失败,原因是"找不到可执行文件'tar',未在$PATH路径中匹配到对应程序")
可用解决方法
方法一:无需在容器内安装tar(适配所有镜像,优先推荐)
直接通过标准输入输出管道完成打包解包流程,绕过kubectl cp的默认调用逻辑,即便是无包管理器的distroless极简镜像也可使用:
- 本地文件/目录拷贝到容器
tar cf - /tmp/foo_dir | kubectl exec -i <替换为实际Pod名称> -- tar xf - -C /tmp/bar_dir - 容器内文件/目录拷贝到本地
kubectl exec -i <替换为实际Pod名称> -- tar cf - /tmp/bar_dir | tar xf - -C /tmp/foo_dir
方法二:容器支持安装软件包时直接安装tar
根据容器使用的基础镜像类型,执行对应命令安装tar,安装完成后即可正常使用原生kubectl cp命令:
- Alpine基础镜像
kubectl exec -it <替换为实际Pod名称> -- apk add --no-cache tar - Debian/Ubuntu基础镜像
kubectl exec -it <替换为实际Pod名称> -- apt update && apt install -y tar - RHEL/CentOS基础镜像
kubectl exec -it <替换为实际Pod名称> -- yum install -y tar
内容的提问来源于stack exchange,提问作者iAmHereForHelp
相关产品推荐
相关产品推荐

