[Troubleshooting] kubectl cp exit code 255 - exec: \"tar\": executable file not found in $PATH"
0. 背景
kubectl cp container 文件到本地 host 报错:
$ kubectl cp test/po-test-pod-0:/tmp ./ -c ctr-test-container
time="2023-12-20T02:17:29Z" level=error msg="exec failed: unable to start container process: exec: \"tar\": executable file not found in $PATH"
command terminated with exit code 255
1. 分析
报错的原因是 kubectl 在拷贝容器文件到本地时,使用 tar 打包 container 的文件,如果容器文件系统没有装 tar 或者 $PATH 系统目录没有指定 tar 包,就会报这样的错。
2. 解决
解决方案有两点:
- 容器内装 tar
- host 上拷贝文件
2.1 容器内装 tar
2.1.1 拷贝 tar 到容器
如分析所示,在容器内装 tar 可以解决拷贝报错的问题。容器内装 tar 可以通过 kubectl cp 拷贝本地 tar 工具到容器系统环境目录,从本地拷贝到容器是不需要 tar 工具的。
当然,这种拷贝可能会有问题,有问题的地方是涉及到 OS 系统库的调用就比较复杂。比如执行 tar 包依赖 Linux 系统库 lib.so(示例),而容器内没有 lib.so 这个库,就会在容器内执行 tar 时报错。
2.1.2 image 安装 tar
编容器 image 的时候安装 tar 包,这是比较保险的方式。当然,需要重新编,重新安装容器,比较麻烦。
2.2 host 上拷贝文件
这种做法比较省事,不需要装 tar,不需要编 image ,有点黑科技的意味。在解释这种方式之前先说明下,image 是静态的容器,容器是动态的 image 。理解这句话就知道下面为什么要这么干了。
这里并不打算介绍其中的原理,侧重于解决,直接给出操作步骤:
1) 查看容器所在 host
$ kubectl get pods po-test-pod-0 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
po-test-pod-0 16/16 Running 0 17m 172.21.24.249 worker13.hztt-pz2-10-100-xxx-xx.ocp.hz.nsn-rdnet.net <none> <none>
Note: 注意我们想看的是容器所在的 host ,pod 是 kubernetes 的概念,在 Kubernetes/OpenShift 上看容器所在的 host,首先要知道容器在哪个 pod 下。
2)login 到 work13 并切换为 root 用户
$ ssh worker13.hztt-pz2-10-100-xxx-xx.ocp.hz.nsn-rdnet.net
$ sudo su
#
3)获取容器 id
# crictl ps | grep ctr-test-container
cd9b94522939a image-registry.openshift-image-registry.svc:5000/test/container@sha256:9516f2783c28faa796f44d670ea46d551384bacb16bef102d66d084efcc43094 20 minutes ago Running ctr-test-container 0 7168da119742f po-test-pod-0
Note: 要查看容器 id,需要看平台用的 cri-o 是什么,有些用 docker,有些用 crio。这里环境用的是 crio,我们可以用 crictl 去看容器的 id。
4)inspect 容器
inspect 容器是为了看容器的文件系统在 host 上的目录,知道了 host 上的目录就能找到要拷贝的容器的文件了:
# crictl inspect 32bfea1ad0f77 | grep io.kubernetes.cri-o.MountPoint
"io.kubernetes.cri-o.MountPoint": "/var/lib/containers/storage/overlay/37eb5dc59ec82566122bc0a61504afb3b6d092fcd74953362d84d8f8b3ef1262/merged",
# cd /var/lib/containers/storage/overlay/37eb5dc59ec82566122bc0a61504afb3b6d092fcd74953362d84d8f8b3ef1262/merged
# ls
afs bin boot dev etc ffs home lib lib64 logs lost+found media mnt opt proc ram rom root rpram run sbin srv sys tmp tmp_repo usr var
可以看到,mountPoint 即为本地 host 上 mount 到容器内的文件系统,我们在本地进入容器文件系统可以实现文件的拷贝。
[Troubleshooting] kubectl cp exit code 255 - exec: \"tar\": executable file not found in $PATH"的更多相关文章
- VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%
1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...
- (转)VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%
原文:https://www.cnblogs.com/zsy/p/5958170.html 1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时, ...
- OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ip": executable file not found in $PATH: unknown (Docker容器没有ip addr命令:exec ip addr 报错)
一.报错 1.报错信息1: OCI runtime exec failed: exec failed: container_linux.go:380: starting container proce ...
- OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "bash": executable file not found in $PATH": unknown
docker save docker save centos:self -o centos.tar 导出镜像到文件 用于持久化镜像,导出的tar包需要用 docker load -i imagedat ...
- go exec: "gcc": executable file not found in %PATH%
win下使用go,在进行go run build.go时,提示 exec: "gcc": executable file not found in %PATH% 原因是sqlitl ...
- gogs仓库管理软件 exec: "git-upload-pack": executable file not found in $PATH
当配置完个人中心的ssh公钥的时候,在客户端拉取代码的时候,提示如下错误: Cloning into 'comix-b2m'... Gogs: Internal error fatal: Could ...
- CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH
CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH 解决方案: 执行如下命令安装GCC,然后重 ...
- Go丨语言package github.com/Go-SQL-Driver/MySQL: exec: "git": executable file not found in %PATH%解决方法
Go语言在添加第三方MySQL驱动的时候报错: go: missing Git command. See https://golang.org/s/gogetcmd package github.co ...
- exec: "docker-proxy": executable file not found in $PATH
在执行 docker run 操作的时候,一直报如下错误: [root@etcd1 vagrant]# docker run --name redis-6379 -p 6379:6379 -d --r ...
- 【解决】OCI runtime exec failed......executable file not found in $PATH": unknown
[问题]使用docker exec + sh进入容器时报错 [root@localhost home]# docker exec -it container-test bash OCI runtime ...
随机推荐
- 带圆角的虚线边框?CSS 不在话下
今天,我们来看这么一个非常常见的切图场景,我们需要一个带圆角的虚线边框,像是这样: 这个我们使用 CSS 还是可以轻松解决的,代码也很简单,核心代码: div { border-radius: 25p ...
- ElasticSearch之Clone index API
使用已有的索引,复制得到一个索引. 关闭testindex_001的写入操作,命令样例如下: curl -X PUT "https://localhost:9200/testindex_00 ...
- Python——第五章:csv模块
未来我们会使用爬虫获取到一些json文件,例如去英雄联盟官方爬取英雄的数据库 查看代码 {"hero":[{"heroId":"1",&qu ...
- 云MSP服务案例|互联网商城的上云改造之旅
简介: 在中国,经过十年的发展,云计算产业已走过概念普及的1.0时期,进入"上云"和落地的2. 0阶段,企业上云意识不断增强,越来越多的企业选择部署多云和混合IT. 如今,云计算生 ...
- 最新消息:OpenAI GPT Store 正式上线,GPTs 应用商店来了!
OpenAI推出的两款新产品和服务:GPT Store和ChatGPT Team,提供了许多全新的解决方案和功能,旨在帮助用户更轻松地使用和构建GPT工具,同时也增加了公司的收入来源.GPT Stor ...
- c#中用System.Diagnostics.Process.Start(Path.GetFullPath(“vlc.exe.lnk“), url);用vlc的快捷方式打开http的url不起作用?
vlc.exe.lnk双击这个文件,能正常打开vlc,但是用System.Diagnostics.Process.Start(Path.GetFullPath("vlc.exe.lnk&qu ...
- AI论文解读:基于Transformer的多目标跟踪方法TrackFormer
摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...
- Python 没有函数重载?如何用装饰器实现函数重载?
摘要:Python 不支持函数重载.当我们定义了多个同名的函数时,后面的函数总是会覆盖前面的函数,因此,在一个命名空间中,每个函数名仅会有一个登记项(entry). 本文分享自华为云社区<为什么 ...
- chrome对页面重绘和回流以及优化进行优化
页面的绘制时间(paint time)是每一个前端开发都需要关注的的重要指标,它决定了你的页面流畅程度.而如何去观察页面的绘制时间,找到性能瓶颈,可以借助Chrome的开发者工具. 回流与重绘 1. ...
- 为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022
GitHub Universe 2022于上周举办.在此次大会上,Github 公布了开源软件状态的最新报告,报告中的统计数据显示,90% 的公司都在使用开源,现在 GitHub 上有9400万用户, ...