当前位置: 首页 > 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    

相关文章:

  • 微调大语言模型后,如何评估效果?一文讲清
  • 领域驱动设计(DDD)【18】之实现聚合的不变规则和持久化
  • 从0到100:房产中介小程序开发笔记(中)
  • day44/60
  • uniapp消息推送
  • Python搭建HTTP服务,如何用内网穿透快速远程访问?
  • 【策划所需编程知识】
  • 83、高级特性-自定义starter细节
  • IBW 2025: CertiK首席商务官出席,探讨AI与Web3融合带来的安全挑战
  • win7实现永恒之蓝ms17_010漏洞之445端口
  • Learning PostgresSQL读书笔记: 第9章 Partitioning
  • .小故事.
  • 腾讯云市场目前饱和度
  • 通达信 稳定盈利多维度趋势分析系统
  • Outlook总是提示登录微软,怎么办?
  • Google机器学习实践指南(逻辑回归损失函数)
  • 《P1471 方差》
  • C++11 <chrono> 库特性:从入门到精通
  • 深入解析RNN模型:应用、结构与构建实战
  • swift 对象转Json