#!/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.pswp.cn/web/86823.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86823.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86823.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECMAScript 2019(ES2019):数组与对象操作的精细化升级

1.版本背景与发布 发布时间:2019年6月,由ECMA International正式发布,标准编号为ECMA-262 10th Edition。历史意义:作为ES6之后的第四次年度更新,ES2019聚焦于数组、对象和字符串操作的精细化改进,提升开发…

2.1.1 配置堡垒机以控制Linux资产文件传输

文章目录 一、试题及考试说明二、操作步骤1. 启动JumpServer服务,浏览器登录(admin/Sjtu1896)2. 创建堡垒机用户,用户名为“ops01”格式命名,邮箱以为“ops01jumpserver.cn”,使用密码“admin123”&#xf…

react ant-design通用页面自适应适配不同分辨率屏幕的方法工具类

该方法会根据 目标分辨率(options.width/height) 和 当前窗口尺寸(innerWidth/innerHeight) 计算缩放比例,并保持 等比例缩放(Math.min(scaleX, scaleY)),确保内容不变形&#xff1a…

基于IEC61499实现的工业机器视觉方案

1.什么是机器视觉 机器视觉就是赋予机器看懂图像的能力。它是一门涉及人工智能、计算机科学、图像处理、光学、机械工程和自动化的交叉技术领域。核心目标是:通过摄像头或其他成像设备获取图像或视频,然后利用计算机算法对这些图像进行分析和理解&#x…

机电一体化论文写作实战指南:从创新设计到工程验证的完整路径

机电论文的“技术-表达”鸿沟 某高校团队研发的智能抓取系统实物表现优异,却被审稿人质疑: “未说明机电耦合设计对性能的影响”——这揭示了机电一体化研究的核心痛点:强工程弱理论。本文基于217篇高影响力论文,拆解从技术到写作…

MySQL 配置参数调优:根据工作负载调整服务器设置

MySQL 数据库的默认配置参数是为了适应各种通用场景而设定的,它们通常无法最大化发挥服务器硬件的潜力,也无法完全匹配特定应用程序的工作负载。一个未优化的 MySQL 配置,在面对高并发、大数据量或特定查询模式时,很容易成为系统性能的瓶颈。 配置参数调优,就是根据你的服…

嵌入式Linux驱动开发基础-2 LED驱动

imx6ull中GPIO涉及寄存器 1:CCM寄存器 GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组 GPIO 用哪个 CCM_CCGR 寄存器来设置。 CCM_CCGR 寄存器中某 2 位的取值含义如下: 00 :该 GPIO 模块全程被关闭 01 &…

深度解析】使用Go语言实现JWT:从原理到实践

JWT(JSON Web Token)已成为现代Web应用中身份验证的基石。本文深入剖析如何用Go语言实现JWT,从基础概念、底层机制到完整代码实践,助你全面掌握。 一、JWT概述 JWT是一种开放标准(RFC 7519),用…

深入解读 DeepSeek-V3 架构及落地的挑战

从多专家架构(MoE)到模型落地实战的一线观察 一、引言:DeepSeek-V3 是什么? 在大模型百花齐放的今天,DeepSeek-V3 作为 DeepSeek 系列的第三代开源模型,不仅延续了高质量对话能力,还在架构上迈…

前端进阶之路-从传统前端到VUE-JS(第二期-VUE-JS框架结构分析)

经过上期内容的学习,我们已经可以构建一个VUE-CLI框架了,接下来我们分析一下这个框架,毕竟知己知彼,百战百胜 我们创建完成后可以看到以下内容 接下来我们分析一下他的文件结构 node_modules用于存放项目所依赖的第三方模块和包…

网络协议 / 加密 / 签名总结

加密方式: 对称加密:key 不可公开。 非对称加密:公钥加密的信息只有私钥能解密。私钥加密的信息只有公钥能解密,且公钥只能解密私钥加密的信息(用于签名)。 非对称加密应用: 签名&#xff1a…

集成学习基础:Bagging 原理与应用

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! Bagging 介绍 1. 定义与全称: Bagging 是 Bootstrap Agg…

skiaSharp linux 上报错

The type initializer for SkiaSharp.SKImageInfo threw an exception 这个错误表明在 Linux 系统上初始化 SkiaSharp 的 SKImageInfo 类型时出现了问题。以下是完整的解决方案: 安装系统依赖: # Ubuntu/Debian sudo apt-get update sudo apt-get ins…

crawl4ai crawler.arun( 超时问题

delay_before_return_html500 # 单位:毫秒 会导致 crawler.arun 超时问题。按理说不应该 await crawler.arun( 1. 浏览器加载页面 ✅ 2. 页面DOM构建完成 ✅ 3. JavaScript执行完成 ✅ 4. 等待 delay_before_return_html 时间 ⏳ (500ms) 5. 返回最终HTML内容 &…

Linux Kernel下exFat使用fallocate函数不生效问题

1)Linux驱动开发相关问题,分享给将要学习或者正在学习Linux驱动开发的同学。 2)内容属于原创,若转载,请说明出处。 3)提供相关问题有偿答疑和支持。 Linux下经常使用fallocate去预分配一个很大的文件空间…

大学专业科普 | 物联网、自动化和人工智能

在选择大学专业时,可以先从自身兴趣、能力和职业规划出发,初步确定几个感兴趣的领域。然后结合外部环境因素,如专业前景、教育资源和就业情况等,对这些专业进行深入的分析和比较。 物联网专业 课程设置 基础课程:包括…

人工智能-基础篇-7-什么是大语言模型LLM(NLP重要分支、Transformer架构、预训练和微调等)

大型语言模型(Large Language Model)。这类模型是自然语言处理(NLP)领域的一个重要分支,它们通过在大量文本数据上进行训练来学习语言的结构和模式,并能够生成高质量的文本、回答问题、完成翻译任务等。 1…

【赵渝强老师】基于PostgreSQL的分布式数据库:Citus

由于PostgreSQL具有强大的功能和良好的可扩展性,因此基于PostgreSQL很容易就可以实现分布式架构。Citus便是具体的一种实现方式。它以扩展的插件形式与PostgreSQL进行集成,且独立于PostgreSQL内核,部署也比较简单。Citus是现在非常流行的基于…

【赵渝强老师】OceanBase OBServer节点的接入层

OceanBase数据库代理ODP(OceanBase Database Proxy,又称OBProxy)是OceanBase数据库的接入层,负责将用户的请求转发到合适的OceanBase数据库实例上进行处理。ODP是独立的进程实例,独立于OceanBase数据库实例部署。ODP监…

ISP Pipeline(8): Color Space Conversion 颜色空间转换

Color Space Conversion(颜色空间转换) 是图像处理中的一个重要步骤,它将图像从一个颜色空间(Color Space)转换到另一个,以满足 显示、分析、压缩或算法需求。 为什么转换颜色空间? 应用场景…