可以读取 /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
