• 解决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进去, 最终如下: 

    1. deb https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib
    2. deb-src https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib
    3. deb https://mirrors.aliyun.com/debian-security/ bookworm-security main
    4. deb-src https://mirrors.aliyun.com/debian-security/ bookworm-security main
    5. deb https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib
    6. deb-src https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib
    7. deb https://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware contrib
    8. 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镜像 是一个道理.

  • 相关阅读:
    同轴电缆技术参数(一)
    打印不同商品价格(使用父类作为返回值实现打印不同类型商品价格)
    prometheus
    springboot323基于Java的美妆购物网站的设计与实现
    【hexo】butterfly主题魔改之天气插件
    windows10不支持Miracast无线投屏(不能进行无线投影)
    10-09 周一 图解机器学习之深度学习感知机学习
    图像绘制-线段、矩形、圆形、椭圆等
    为什么资源隔离对HTAP至关重要?
    运输层详解
  • 原文地址:https://blog.csdn.net/m0_51681531/article/details/139321305