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

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

bash 复制代码
#!/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 "=============================================="

保存脚本:

保存脚本到文件

bash 复制代码
vi /data/k8s-package/load_offline_images.sh

给脚本执行权限

bash 复制代码
chmod +x /data/k8s-package/load_offline_images.sh

运行脚本:

bash 复制代码
cd /data/k8s-package
./load_offline_images.sh

脚本功能:

✅ 自动扫描 /data/k8s-package 目录下的所有 .tar 文件

✅ 显示文件列表 带序号和文件大小

✅ 交互式选择 可以按编号选择单个镜像加载

✅ 批量加载 输入 a 可以一次性加载所有镜像

✅ 持续运行 加载完一个镜像后可以继续选择其他镜像

✅ 确认机制 加载前会要求确认

✅ 结果反馈 显示加载成功或失败

✅ 退出选项 输入 q 退出脚本

✅ 最后显示 加载完成后显示当前系统中的所有 Docker 镜像

示例运行效果:

bash 复制代码
==============================================
       离线镜像加载工具
==============================================
找到 5 个镜像文件:

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

请选择要加载的镜像编号 (1-3) 或输入选项: 1
相关推荐
风向决定发型丶几秒前
K8S PDB介绍
云原生·容器·kubernetes
Agent产品评测局6 分钟前
图片生成智能体哪家好?2026年企业级视觉创作与自动化选型全景横评
运维·人工智能·ai·自动化
猫头虎-人工智能10 分钟前
ToDesk ToClaw AI自动化实测:零门槛玩转日常自动化,告别折腾与硬件损耗
运维·人工智能·架构·开源·自动化·aigc·ai编程
实在智能RPA11 分钟前
Agent 能做流程的自动化监控吗?——深度拆解2026年AI智能体在企业级闭环监控中的技术实践
运维·人工智能·ai·自动化
翱翔-蓝天21 分钟前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器
云飞云共享云桌面24 分钟前
研发部门使用SolidWorks和ug,cad,设计共享云桌面应该怎么选?
运维·服务器·网络·人工智能·3d
江湖有缘24 分钟前
PanCheck 容器化部署:自建网盘链接检测服务全流程
docker
麦聪聊数据29 分钟前
数据库安全与运维管控(五):基于AST的SQL拦截与动态审批
运维·数据库·sql
亚空间仓鼠31 分钟前
OpenEuler系统常用服务(十)
linux·运维·服务器·网络
艾莉丝努力练剑31 分钟前
【Linux线程】Linux系统多线程(四):线程ID及进程地址空间布局,线程封装
java·linux·运维·服务器·c语言·c++·学习