exec failed: exec failed..... exec: “ip“(Docker容器没有ip addr命令:ex(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
又报错:
18 packages can be upgraded. Run ‘apt list --upgradable’ to see them.
W: Failed to fetch http://deb.debian.org/debian/dists/bullseye/InRelease Could not connect to debian.map.fastlydns.net:80 (151.101.74.132), connection timed out Could not connect to deb.debian.org:80 (151.101.110.132), connection timed out
W: Failed to fetch http://deb.debian.org/debian/dists/bullseye-updates/InRelease Unable to connect to deb.debian.org:http:
W: Some index files failed to download. They have been ignored, or old ones used instead.
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!
exec failed: exec failed..... exec: “ip“(Docker容器没有ip addr命令:ex(Docker容器没有ip addr命令:exec ip addr 报错)相关推荐
- 微信企业付款 ”错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置“报错的处理办法
提示"错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置" 快速解决问题!!! 解说一下这个IP:这个IP是你发起支付的服务器外网I ...
- rbenv安装Ruby2.3.5报错BUILD FAILED (Ubuntu 18.04 using ruby-build 20191225-1-gbac1f1c) openssl
1.错误全貌 vagrant@vagrant:~$ rbenv install 2.3.5 Downloading ruby-2.3.5.tar.bz2... -> https://cache. ...
- Maven依赖编译失败报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
报错笔记:IDEA2021无法执行compile编译Maven依赖 当我们对一个从github或其他人手里等其来源得到的Maven项目,进行执行compile编译pom.xml文件依赖时,经常出现Fa ...
- jhipster修改jdl生成的实体类报错:liquibase.exception.ValidationFailedException: Validation Failed
使用jhipster创建一个实体类之后,发现实体类不满足业务需求,需要修改: 如果是使用jdl创建的,那么我们只需要在原先的.jh文件中修改实体类内容,然后在项目根目录下执行命令: jhipster ...
- Android刷机报错failed to mount /cache (No such device)
小米3手机刷CM13的rom,fastboot刷入recovery后,使用adb sideload命令刷入rom,但是每次手机上都是报错 E: failed to mount /cache (No s ...
- Quartus联合modelsim的ip核仿真——以FIFO为例——(报错问题解决)
tips:本文章不涉及fifo的ip核参数含义讲解,只是通一通开发流程,总结一下哪里容易报错,新手向,旨在能够正确出波形,别卡在报错中折磨. 在新建工程前,新建文件夹管理文件 打开quartus,新建 ...
- WIN10下 docker报错Error response from daemon: invalid mode
参考:https://blog.csdn.net/u010785091/article/details/86304365?utm_medium=distribute.pc_relevant_t0.no ...
- docker进入容器报错:OCI runtime exec failed: exec failed: container_linux.go:345: starting container proces
docker进入容器报错: OCI runtime exec failed: exec failed: container_linux.go:345: starting container proce ...
- 进入Docker 容器 docker exec [CONTAINER ID] bin/bash报错问题
问题 (base) Eistert-2:xxxx-web eistert$ docker exec -it f365682ef502 /bin/bash OCI runtime exec failed ...
最新文章
- word2vec中文相似词计算和聚类的使用说明及c语言源码
- Apple Mac OS X每日一技巧025:小学算术好的快帮我⋯把Spotlight当计算器,结果杯具了...
- Spark2.3.0的DataFrame去哪了,DataSet是哪位?
- clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)
- 怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...
- C#中 Convert与Parse的区别
- 2018.8.26 Spring自学如门
- 电力项目十--整合文本编辑器
- nginx authorization 丢失_婚礼影像丢失 损失如何弥补?_政务_澎湃新闻
- linux系统硬盘数据恢复软件下载,R-Linux|R-Linux(linux数据恢复软件)下载 v5.1中文免费版 - 121下载站...
- A. Game With Sticks
- 浙江省高考计算机重点知识,2017届浙江省新高考信息技术考试标准
- c语言课程表代码,[计算机]c语言课程表源代码
- TO-220与TO-220F的区别 封装
- 汽车洒水器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 从零开始学编程——环境配置
- Android主题色设为透明
- iOS 13越狱:越狱后如何安装AppSync和afc2越狱补丁
- android导出微信朋友圈怎么发文字,微信朋友圈气泡字怎么弄 微信朋友圈气泡文字生成教程...
- 请你来说一下数字证书是什么,里面都包含那些内容