docker离线镜像文件选择导入脚本方式

 更新时间:2025年10月31日 08:53:24   作者:❀͜͡傀儡师  
本文档提供了一个脚本,用于自动扫描、显示和导入`/data/k8s-package`目录下的Docker离线镜像文件,用户可以选择单个或批量导入镜像,并在每次加载后进行确认,脚本运行后,会显示加载结果,并最终列出当前系统中的所有Docker镜像

docker离线镜像文件选择导入脚本

可以读取 /data/k8s-package 目录下的离线镜像文件,让用户选择导入:

#!/bin/bash

# 脚本:离线镜像加载工具
# 功能:读取 /data/k8s-package 目录下的 .tar 镜像文件,交互式选择加载

IMAGE_DIR="/data/k8s-package"

# 检查目录是否存在
if [ ! -d "$IMAGE_DIR" ]; then
    echo "错误: 目录 $IMAGE_DIR 不存在!"
    exit 1
fi

# 查找所有的 .tar 镜像文件
image_files=($(find "$IMAGE_DIR" -name "*.tar" -type f | sort))

# 检查是否找到镜像文件
if [ ${#image_files[@]} -eq 0 ]; then
    echo "在 $IMAGE_DIR 目录下没有找到 .tar 镜像文件!"
    exit 1
fi

echo "=============================================="
echo "       离线镜像加载工具"
echo "=============================================="
echo "找到 ${#image_files[@]} 个镜像文件:"
echo ""

# 显示镜像文件列表
for i in "${!image_files[@]}"; do
    filename=$(basename "${image_files[$i]}")
    size=$(du -h "${image_files[$i]}" | cut -f1)
    echo "  $((i+1)). $filename ($size)"
done

echo ""
echo "  q. 退出"
echo "  a. 加载所有镜像"
echo "=============================================="

# 主循环
while true; do
    echo ""
    read -p "请选择要加载的镜像编号 (1-${#image_files[@]}) 或输入选项: " choice
    
    case $choice in
        [Qq]* )
            echo "退出脚本."
            break
            ;;
        [Aa] )
            echo "开始加载所有镜像..."
            for file in "${image_files[@]}"; do
                filename=$(basename "$file")
                echo "正在加载: $filename"
                if docker load -i "$file"; then
                    echo "✓ 成功加载: $filename"
                else
                    echo "✗ 加载失败: $filename"
                fi
                echo "----------------------------------------------"
            done
            echo "所有镜像加载完成!"
            break
            ;;
        * )
            # 检查输入是否为数字且在有效范围内
            if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "${#image_files[@]}" ]; then
                index=$((choice-1))
                selected_file="${image_files[$index]}"
                filename=$(basename "$selected_file")
                
                echo "您选择了: $filename"
                echo "文件路径: $selected_file"
                echo "文件大小: $(du -h "$selected_file" | cut -f1)"
                
                # 确认加载
                read -p "确认加载这个镜像? (y/n): " confirm
                if [[ $confirm =~ ^[Yy]$ ]]; then
                    echo "正在加载: $filename"
                    if docker load -i "$selected_file"; then
                        echo "✓ 成功加载: $filename"
                    else
                        echo "✗ 加载失败: $filename"
                    fi
                else
                    echo "取消加载: $filename"
                fi
            else
                echo "无效选择! 请输入 1-${#image_files[@]} 的数字,或输入 q 退出,a 加载所有镜像"
            fi
            ;;
    esac
done

echo ""
echo "=============================================="
echo "当前系统中的 Docker 镜像:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedSince}}"
echo "=============================================="

保存脚本:

保存脚本到文件

vi /data/k8s-package/load_offline_images.sh

给脚本执行权限

chmod +x /data/k8s-package/load_offline_images.sh

运行脚本:

cd /data/k8s-package
./load_offline_images.sh

脚本功能:

  • ✅ 自动扫描 /data/k8s-package 目录下的所有 .tar 文件
  • ✅ 显示文件列表 带序号和文件大小
  • ✅ 交互式选择 可以按编号选择单个镜像加载
  • ✅ 批量加载 输入 a 可以一次性加载所有镜像
  • ✅ 持续运行 加载完一个镜像后可以继续选择其他镜像
  • ✅ 确认机制 加载前会要求确认
  • ✅ 结果反馈 显示加载成功或失败
  • ✅ 退出选项 输入 q 退出脚本
  • ✅ 最后显示 加载完成后显示当前系统中的所有 Docker 镜像

示例运行效果:

==============================================
       离线镜像加载工具
==============================================
找到 5 个镜像文件:

  1. nginx_20251011144621.tar (215MB)
  2. redis_20251011144730.tar (118MB)
  3. mysql_20251011144815.tar (444MB)
  q. 退出
  a. 加载所有镜像
==============================================

请选择要加载的镜像编号 (1-3) 或输入选项: 1

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker搭建Zookeeper&Kafka集群的实现

    Docker搭建Zookeeper&Kafka集群的实现

    这篇文章主要介绍了Docker搭建Zookeeper&Kafka集群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 5分钟安装docker详细步骤

    5分钟安装docker详细步骤

    官方推荐使用通过设置docker仓库的方法来安装,安装和升级都简单些,今天就来教大家5分钟入手安装docker教程超详细的安装步骤,感兴趣的朋友一起看看吧
    2021-05-05
  • Docker容器输入汉字触发自动补全问题

    Docker容器输入汉字触发自动补全问题

    Linux系统中,当终端出现中文乱码通常是由于缺少中文字符集和字体,安装中文字体和设置合适的字符集zh_CN.utf8,可以有效解决这一问题,首先,通过查看系统支持的字符集了解是否支持中文,然后安装相应字符集,其次,查看并设置当前系统字符集
    2024-10-10
  • 使用Docker部署OpenClaw的完整流程

    使用Docker部署OpenClaw的完整流程

    本文详细介绍了从源码编译到Docker容器化部署OpenClaw的过程,包括编译打包、启动容器、配置Token以及迁移部署的步骤和注意事项,需要的朋友可以参考下
    2026-03-03
  • Docker给容器添加新端口映射两种方法及常用命令

    Docker给容器添加新端口映射两种方法及常用命令

    在使用Docker时容器的端口映射是一个核心概念,它允许容器与宿主机以及外部网络进行通信,这篇文章主要给大家介绍了关于Docker给容器添加新端口映射两种方法及常用命令的相关资料,需要的朋友可以参考下
    2024-07-07
  • 解决Docker报错:“docker build“ requires exactly 1 argument.

    解决Docker报错:“docker build“ requires exactly&nb

    这篇文章主要介绍了解决Docker报错:“docker build“ requires exactly 1 argument.具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Docker-Compose的使用示例详解

    Docker-Compose的使用示例详解

    docker-compose是用来在Docker中定义和运行复杂应用的工具,比如在一个yum文件里定义多个容器,只用一行命令就可以让一切就绪并运行。下面通过示例给大家介绍Docker-Compose的使用,感兴趣的朋友一起看看吧
    2017-07-07
  • Docker查看镜像详情的多种常用方法介绍

    Docker查看镜像详情的多种常用方法介绍

    这篇文章主要为大家详细介绍了Docker查看镜像详情的多种常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2025-12-12
  • Docker镜像加载原理

    Docker镜像加载原理

    Docker镜像是Docker容器运行的基础,没有Docker镜像,就不可能有Docker容器,这也是Docker的设计原则之一 ,本文给大家介绍Docker镜像加载原理,感兴趣的朋友一起看看吧
    2021-06-06
  • 前端项目容器化Docker打包部署方式详解

    前端项目容器化Docker打包部署方式详解

    这篇文章主要为大家介绍了前端项目容器化Docker打包部署方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论