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"的更多相关文章

  1. VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...

  2. (转)VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    原文:https://www.cnblogs.com/zsy/p/5958170.html 1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时, ...

  3. 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 ...

  4. 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 ...

  5. go exec: "gcc": executable file not found in %PATH%

    win下使用go,在进行go run build.go时,提示 exec: "gcc": executable file not found in %PATH% 原因是sqlitl ...

  6. gogs仓库管理软件 exec: "git-upload-pack": executable file not found in $PATH

    当配置完个人中心的ssh公钥的时候,在客户端拉取代码的时候,提示如下错误: Cloning into 'comix-b2m'... Gogs: Internal error fatal: Could ...

  7. CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH

    CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH 解决方案: 执行如下命令安装GCC,然后重 ...

  8. 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 ...

  9. exec: "docker-proxy": executable file not found in $PATH

    在执行 docker run 操作的时候,一直报如下错误: [root@etcd1 vagrant]# docker run --name redis-6379 -p 6379:6379 -d --r ...

  10. 【解决】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 ...

随机推荐

  1. Kernel Memory 入门系列:生成并获取文档摘要

    Kernel Memory 入门系列:生成并获取文档摘要 前面在RAG和文档预处理的流程中,我们得到一个解决方案,可以让用户直接获取最终的问题答案. 但是实际的业务场景中,仍然存在一些基础的场景,不需 ...

  2. python tkinter使用(九)

    python tkinter使用(九) 本文主要讲下scrolledText中图片的插入,以及常见的错误. 使用Image.open来打开图片 使用ImageTk.PhotoImage()方法将图片转 ...

  3. 面向对象(OOP)

    面向对象 面向对象 面向过程 & 面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么... 面对过程适合处理一些较为简单问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先 ...

  4. CentOS配置DNS服务器(BIND 9.11.*版本),并配置3种转发模式

    BIND 9.11.*版本可以yum直接安装 安装BIND组件,开启DNS服务,检查状态 yum install bind bind-utils systemctl start named syste ...

  5. android学习笔记(1)

    Android 开发框架 android系统是一个开放且体积庞大的系统,从功能上,将android开发分为移植开发移动电话系统,android应用开发和android系统开发三种. 移动移植移动电话系 ...

  6. 元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata

    大家好,我是独孤风.元数据管理平台层出不穷,但目前主流的还是Atlas.Datahub.Openmetadata三家,那么我们该如何选择呢? 本文就带大家对比一下.要了解元数据管理平台,先要从架构说起 ...

  7. NanoDet:这是个小于4M超轻量目标检测模型

    摘要:NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型. 前言 YOLO.SSD.Fast R-CNN等模型在目标检测方面速度较快和精度较高,但是这些模型比较大,不 ...

  8. 一文总结GaussDB通信原理知识

    摘要:从发展历程到通信模型设计,到你了解一下GaussDB通信原理知识. MPPDB通信库发展历程 Postgres-XC 方法:采用libpq通信库实现CN和DN之间的连接,CN负责计算,DN仅进行 ...

  9. 华为云AI论文精读会2021第一期:高效语义分割模型Fast-SCNN分享

    2020年举办的华为云AI经典论文复现活动,不仅受到了参赛者们一致好评,也产出了许多优质的算法成果.这些论文复现的算法描述.源代码以及算法使用指导文档均已发布到了AI Gallery.为了让开发者更好 ...

  10. 性能提升1400+倍,快来看MySQL Volcano模型迭代器的谓词位置优化详解

    摘要:性能提升1400+倍,快来看MySQL Volcano模型迭代器的谓词位置优化详解. 本文分享自华为云社区<华为云数据库内核专家为您揭秘MySQL Volcano模型迭代器性能提升千倍的秘 ...