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 报错)

简介: 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 process caused: exec: "ip": executable file not found in $PATH: unknown

2、报错原因:

我们下载的某个镜像(例如tomcat镜像)是精简版的,利用这个镜像去打开一个容器的时候发现没有ip addr这个命令。

3、解决报错1的方法:安装工具 iproute2

# 进入容器内部(比如tomcat01容器)
docker exec -it --name tomcat01 -P tomcat:9.0 /bin/bash
apt install -y iproute2


注意:查看一下容器的系统版本信息:

cat /etc/os-release

★ Linux系统分为两种:

1.RedHat系列:Redhat、Centos、Fedora等

2.Debian系列:Debian、Ubuntu等

  • RedHat系列的包管理工具是yum
  • Debian系列的包管理工具是apt-get

● 查看系统版本命令:cat /etc/os-release


二、又报错:

1、报错信息2:

Reading package lists... Done

Building dependency tree... Done

Reading state information... Done

E: Unable to locate package iproute2

2、报错原因:

包管理工具apt的镜像是国外的导致,下载速度过慢导致的。

3、解决报错2的方法:更换apt 配置文件中的镜像

# 进入配置文件
cd /etc/apt
# 查看目录信息
ls
cat sources.list
# 备份
mkdir sources.list.backup
cp sources.list ./sources.list.backup
# 以覆盖+追加的方式替换掉sources.list文件
echo 'deb https://mirrors.aliyun.com/debian bullseye main'>sources.list
echo 'deb https://mirrors.aliyun.com/debian-security bullseye-security main'>>sources.list
echo 'deb https://mirrors.aliyun.com/debian bullseye-updates main'>>sources.list
# 执行一下更新命令:
apt-get update -y
# 执行下载 iproute2命令:
apt install -y iproute2


三、问题解决,测试一下,在docker 容器内使用ip 命令

# 测试1:-it 与容器进行交换
docker exec -it --name tomcat01 -P tomcat:9.0 ip addr
# 测试2:先进入容器,然后测试ip命令
docker exec -it --name tomcat01 -P tomcat:9.0 /bin/bash
ip a




以下,是我,搜索本问题时,被误导产生的一些无效折腾

■ 被误导在centos7(我的宿主机)中安装 iproute2,实则是centos新版版(比如centso7/centos8早已内置网络工具iproute2)

■ 然后又为了解决Docker容器没有ip addr命令,在宿主机安装 epel-release,结果报错,没有找到这个包,是因为网上的解决方案,命令不全,没有先执行下载 epel-release安装包,就直接来个yum install,导致找不到包。

■ 同样,对于 iproute2,也是没有给出下载命令,却直接来个安装命令yum install iproute2,导致找不到包iproute2。

■ 最重要的是 centos新版本已经内置有了iproute2,没必要安装呀

■ 最最最重要的是跑题了,咱需要考虑的是命令ip是在docker容器执行失败,而在宿主机执行正常!解决起点应该回到容器内安装网络工具 iproute2。因为下载的镜像是精简版的,默认不自带网络工具iproute2。



● Docker容器没有ip addr命令:exec ip addr 报错:

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

  • 报错原因:我们下载的Tomcat镜像是精简版的,利用这个镜像去打开一个容器的时候发现没有ip addr这个命令。
  • 解决方式:安装 iproute2:apt install -y iproute2

● 又错误:

-bash: apt: command not found

  • 问题原因:linux的版本造成的,我这个版本使用的是yum,而不是apt
  • 解决:yum install -y iproute2

● 又错误:No package iproute2 available. Error: Nothing to do

★ 解决方式1:安装yum的扩展包epel-release

  • 查看linux版本,下载对应版本的epel-release
# 查看系统的命令:
cat /etc/redhat-release

● 又错误:安装epel-release报错

执行命令 yum -y install https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm

  • 报错:
    Loaded plugins: fastestmirror
    epel-release-7-14.noarch.rpm | 15 kB 00:00:00
    Examining /var/tmp/yum-root-OIjg1L/epel-release-7-14.noarch.rpm: epel-release-7-14.noarch
    /var/tmp/yum-root-OIjg1L/epel-release-7-14.noarch.rpm: does not update installed package.
    Error: Nothing to do
  • 解决:先使用wget 命令下载,然后再执行yum 命令安装
# 查看 epel 版本信息
命令:rpm -qa|grep epel
epel-release-7-14.noarch
# 卸载老版本的epel-release(若是最新版,这不用版本可以不写,我的刚好就是最新版本的,不然就需要写明卸载epel-release-某个版本)
命令:yum remove epel-release  或者 yum remove epel-release-7-14.noarch
# 安装 epel-release
命令:yum install -y epel-release-7-14.noarch

● 此时,安装iproute2,错误依旧:yum install -y iproute2

No package iproute2 available.

Error: Nothing to do

---更换解决方式

★ 方式2:更新yum 源,记得先备份原先的yum源(结果依然无效)

# 进入目录
cd /etc/yum.repos.d/
# 备份:
备份方式1:
mkdir yum.repos.d.backup
cp -r yum.repos.d ./yum.repos.d.backup
备份方式2:mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 根据centos版本下载对应的新源【我的centos是版本7的】
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
# 清空yum缓存
yum clean all
# 生成缓存,会把新下载CentOS-Base.repo源生效
yum makecache 
# 更新
yum -y update

☺ 我明白了:No package iproute2 available.

Error: Nothing to do。

意思是,找不到可以利用的包(安装包),解决:就是先下载下来 iproute2的安装包,然再安装。

# 下载iproute2的安装包
# 安装iproute2

本题解决方法,早已跑偏,还记得咱的问题是什么吗?

1、了解网络配置工具net-tools与iproute2,发现:net-tools 是老版本linux的网络工具,而iproute2是linux新版本(例如centos7、centos8)的网络工具,且已经内置,不用手动安装"至此,恍然大悟,跑题了,咱是docker 内部没有iproute2,而不是centos系统没有"。

可以直接使用网络命令,例如ip addr 等等,查看iproute2的版本命令: ip -V

[root@iZwz9535z41cmgcpkm7i81Z ~]# ip -V
ip utility, iproute2-ss170501

2、iproute2的下载镜像:https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/

Docker容器没有ip addr命令:exec ip addr 报错.

  • 报错原因:我们下载的Tomcat镜像是精简版的,利用这个镜像去打开一个容器的时候发现没有ip这个命令。
  • 解决方式:
  • [先解决安装yum 的问题,再通过yum 安装iproute2] (不对,通过查询docker 容器的系统版本,发现版本是debain,内置的是apt,不是yum)
  • 安装 iproute2:apt install -y iproute2

(1)查看docker 容器的系统版本:cat /etc/os-release

# 系统版本
root@f1cfb81dedfd:/usr/local/tomcat# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
# 系统版本详情,redhat的命令:cat /etc/redhat-release   debain的命令:cat /etc/debian_version

(2)安装 iproute2:

root@f1cfb81dedfd:/usr/local/tomcat# apt install -y iproute2
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package iproute2
  • 问题:Unable to locate package:无法找到包。
  • 解决:升级一下 apt,再安装 iproute2
apt update


目录
相关文章
|
Linux Docker 容器
安装docker-18.06报错Error: libseccomp conflicts with docker-18.06
通过这些步骤,您可以成功在CentOS上安装Docker 18.06,并解决libseccomp的冲突问题。这些方法确保系统兼容性,并保证Docker的正常运行。
420 27
|
前端开发 JavaScript Docker
拿下奇怪的前端报错(五):SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 基于容器搭建开发环境或许是更好的选择
在前端开发中,同时维护多个项目时可能会遇到不同Node.js版本的问题。低版本Node.js可能导致依赖无法安装或启动失败,而高版本Node.js则可能引起第三方库的兼容性问题。推荐使用Docker搭建独立的开发环境,以避免版本不一致带来的困扰。
3977 3
|
JavaScript 前端开发 Docker
拿下奇怪的前端报错(二):nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
本文介绍了在多版本Node.js环境中使用nvm进行版本管理和遇到的问题,以及通过Docker化构建流程来解决兼容性问题的方法。文中详细描述了构建Docker镜像、启动临时容器复制构建产物的具体步骤,有效解决了不同项目对Node.js版本的不同需求。
840 1
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
6928 4
|
搜索推荐 应用服务中间件 nginx
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
1427 2
|
网络虚拟化 Docker 容器
docker Desktop报错 error pulling image configuration 处理
docker Desktop报错 error pulling image configuration 处理
318 0
|
网络协议 应用服务中间件 Linux
docker常见报错提示WARNING: IPv4 forwarding is disabled. Networking will not work.或/usr/bin/docker-current:
### 故障与解决方法概览 1. **故障现象**:运行 `docker run -d -P httpd:centos` 时提示“IPv4转发已禁用,网络将无法工作”。 - **解决方法**:通过编辑 `/etc/sysctl.conf` 设置 `net.ipv4.ip_forward=1` 并执行 `sysctl -p` 启用路由转发,然后重启 Docker 服务。
946 0
|
Shell 数据安全/隐私保护 Docker
9-2|docker rm报错
9-2|docker rm报错
|
Linux 开发工具
linux的管道和环境变量PATH
PATH这个环境变量详解
232 0
linux的管道和环境变量PATH