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

导出docker-compse.yml中docker镜像成tar文件

#!/bin/bash

# 确保脚本在正确的目录下运行
SCRIPT_DIR=$(dirname "$(realpath "$0")")
cd "$SCRIPT_DIR" || exit 1

# 定义docker-compose文件路径
COMPOSE_FILE="${SCRIPT_DIR}/docker-compose.yml"

# 创建导出目录
EXPORT_DIR="${SCRIPT_DIR}/docker_images"
mkdir -p "$EXPORT_DIR"

# 检查是否安装了docker
if ! command -v docker &> /dev/null; then
    echo "错误: 未找到docker命令,请先安装docker。"
    exit 1
fi

# 检查docker-compose文件是否存在
if [ ! -f "$COMPOSE_FILE" ]; then
    echo "错误: 未找到docker-compose文件: $COMPOSE_FILE"
    exit 1
fi

# 从docker-compose.yml提取镜像列表
echo "正在从 $COMPOSE_FILE 提取镜像列表..."
IMAGES=$(grep -oP 'image:\s*\K[^"\s]+' "$COMPOSE_FILE" | sort -u)

if [ -z "$IMAGES" ]; then
    echo "错误: 在docker-compose文件中未找到镜像定义"
    exit 1
fi

echo "找到以下镜像需要导出:"
echo "$IMAGES" | while read -r image; do
    echo "- $image"
done
echo

# 导出镜像函数
export_image() {
    local image=$1
    local tar_file="${EXPORT_DIR}/${image//[:\/]/-}.tar"
    
    echo "正在导出镜像: $image"
    echo "目标文件: $tar_file"
    
    # 检查镜像是否存在
    if ! docker image inspect "$image" &> /dev/null; then
        echo "警告: 镜像 $image 不存在,跳过导出"
        return 1
    fi
    
    # 导出镜像
    docker save -o "$tar_file" "$image"
    
    if [ $? -eq 0 ]; then
        local size=$(du -h "$tar_file" | cut -f1)
        echo "成功导出 $image (大小: $size)"
    else
        echo "导出 $image 失败"
        return 1
    fi
}

# 导出所有镜像
echo "开始导出镜像..."
echo "$IMAGES" | while read -r image; do
    export_image "$image" || export_errors=true
done

# 输出结果
echo
echo "镜像导出完成!"
echo "导出的镜像位于: $EXPORT_DIR"

if [ -n "$export_errors" ]; then
    echo "注意: 导出过程中存在错误,请检查上面的输出。"
    exit 1
else
    echo "所有镜像均已成功导出。"
    exit 0
fi    

http://www.lqws.cn/news/548335.html

相关文章:

  • 麒麟系统使用-运用VSCode运行.NET工程
  • swift 对象转Json
  • 分布式系统ID生成方案深度解析:雪花算法 vs UUID vs 其他主流方案
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试
  • Ubuntu 20.04 系统上运行 SLAM卡顿是什么原因
  • 免安装一键修复网络诊断 + 权限修复!打印机共享错误工具适配 Win7/10/11
  • Spring Boot 项目实训 - 图书信息网站
  • 移动端测试——如何解决iOS端无法打开弹窗式网页(Webkit)
  • canvas面试题200道
  • C++:string类(1)
  • 临床项目计划框架
  • java代码规范
  • 机器学习2——贝叶斯理论下
  • 【Linux手册】进程终止:进程退出和信号的响应机制
  • 微软全新开源的Agentic Web网络项目:NLWeb详解
  • 【C/C++】单元测试实战:Stub与Mock框架解析
  • 【世纪龙科技】吉利博瑞汽车车身诊断与校正仿真教学软件
  • window显示驱动开发—DirectX 图形内核子系统(二)
  • Ai大模型 - ocr图像识别形成结构化数据(pp-ocr+nlp结合) 以及训练微调实现方案(初稿)
  • 第六章 总线
  • 四大高频设计题深度解析:【LRU缓存】、【LFU缓存】、最大频率栈、餐盘栈
  • 论面向服务的架构设计
  • Java项目:基于SSM框架实现的宠物综合服务平台管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • MySQL在C中常用的API接口
  • 楼宇自控系统以智能化管控,全方位满足建筑节约、安全与可靠运行需求
  • 嵌入式项目:基于QT与Hi3861的物联网智能大棚集成控制系统
  • 模型部署和推理架构学习笔记
  • <script setup> 语法糖
  • 中高端服装品牌开展全渠道零售业务,如何选OMS订单管理系统?|商派
  • 成都芯谷金融中心·文化科技产业园:绘就区域腾飞新篇章