当前位置: 首页 > news >正文

解决docker容器: bash: ping: command not found, 并制作镜像

一. 出现原因

从 dockerhub 拉下来的镜像都是最轻量级的, 不会安装各种工具, 所以使用 ping, vim 等命令, 会出现 command not found

二. 解决方式

2.1 安装工具包

进入到一个正在运行的容器内部, 执行命令:

apt-get update

之后会发现, 容器正在更新软件包, 不过最终会由于国外镜像源, 以及网络原因导致更新失败

2.2 更换国内镜像源

在 seata 的安装目录下创建 conf 文件夹, 之后使用命令

vim sources.list

把国内镜像源CV进去, 最终如下: 

deb https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib
deb https://mirrors.aliyun.com/debian-security/ bookworm-security main
deb-src https://mirrors.aliyun.com/debian-security/ bookworm-security main
deb https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib
deb https://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware contrib

之后编辑 seata 的 docker-compose.yml 文件, 在挂载目录下, 新增 sources.list 的挂载, 使用宿主机的, 国内镜像源的 sources.list, 宿主机目录需要换成自己电脑的目录

      - "/Users/canxiusi/Documents/docker/seata/conf/sources.list:/etc/apt/sources.list"

2.3 再次更新

重启 seata, 之后进入 seata 容器内部, 再次更新, 发现镜像源已经是阿里的, 并且更新成功, 没有报错

之后执行安装 ping 命令, 等待一会, 安装成功, 之后测试 ping 同网络组下的 nacos-server, 发现成功 ping 通

apt install iputils-ping

三. 打包自己的镜像

以上的更新软件包, 以及安装ping工具, 都是针对当前这个容器, 换句话说, 如果该容器被删除, 之前更新和安装的 ping 将不复存在

使用该命令, 停止服务, 注意: 该命名会删除容器和移除网络组

docker compose down

再次使用 docker compose up -d 启动 seata 服务, 启动成功后, 进去容器内部, 发现又出现了:

bash: ping: command not found

此刻还需要重复之前的操作, 更新软件包, 安装 ping 工具, 相当麻烦

3.1 打包制作自定义镜像

打包已经安装了ping工具的容器, 成为一个新的镜像, 后续直接启动该镜像, 则无需再次安装相关工具

命令:

docker commit [CONTAINER_ID或CONTAINER_NAME] [新镜像名称]:[标签]

docker commit 52e9e9ff94aa ping-seata-server:v1

之后使用查看 seata 的镜像, 可以发现, 现在有2个 seata 镜像, 一个官方的, 只有 396 MB 

另一个是我们刚才打包完成的镜像, 已经达到了 1.46 GB

3.2 从新的镜像启动容器

停止并删除现在的 seata 容器, 修改 seata 的 docker-compose.yml 的 image 标签, 使用我们刚才打包的镜像

再次使用 docker compose up -d 启动后, 发现现在的容器来自于刚才打包的 

ping-seata-server:v1 镜像, 而且进入容器内部后, 直接可以使用 ping 命令, 而不需要再次更新 apt,

后续我们在容器里下载了什么东西, 或配置了什么信息, 都可以重新打包为新的镜像,

和我们在开发中修改业务代码, 重新把微服务打包成 docker镜像 是一个道理.

相关文章:

  • 牛客小白月赛95
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • 【面试题】JavaScript基础高频面试(下)
  • Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译
  • 【React】封装一个好用方便的消息框(Hooks Bootstrap 实践)
  • oracle创建新用户,并且只给新用户赋予查询权限
  • 2024Dragon Knight CTF复现web
  • 11.1 排序算法
  • C++中的智能指针类别
  • 汽车MCU虚拟化--对中断虚拟化的思考(1)
  • 利用GNSS IMU集成提高车道级定位精度
  • Blueprints - Collision Presets相关
  • 4月啤酒品类线上销售数据分析
  • Java-集合基础
  • LeetCode # 1070. 产品销售分析 III
  • 「译」Node.js Streams 基础
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Android Studio:GIT提交项目到远程仓库
  • Android Volley源码解析
  • canvas 高仿 Apple Watch 表盘
  • conda常用的命令
  • HTML5新特性总结
  • HTTP 简介
  • java8-模拟hadoop
  • Javascript 原型链
  • MySQL的数据类型
  • Theano - 导数
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 后端_MYSQL
  • 记一次和乔布斯合作最难忘的经历
  • 聚类分析——Kmeans
  • 如何编写一个可升级的智能合约
  • 学习Vue.js的五个小例子
  • Java总结 - String - 这篇请使劲喷我
  • zabbix3.2监控linux磁盘IO
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 数据可视化之下发图实践
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (超详细)语音信号处理之特征提取
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (黑马C++)L06 重载与继承
  • (转)ABI是什么
  • (转载)(官方)UE4--图像编程----着色器开发
  • **python多态
  • .gitignore不生效的解决方案
  • .NET C# 使用 iText 生成PDF
  • .NET CLR基本术语
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • @Transactional 详解