当前位置: 首页 > 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.lryc.cn/news/576177.html

相关文章:

  • 基于fpga的串口控制的音乐播放器
  • 从0开始学习计算机视觉--Day04--损失函数
  • 微信小程序:实现树形结构组件
  • 【MySQL进阶】服务器配置与管理——系统变量,选项,状态变量
  • 将ONNX模型转换为(OPENMV可用的格式)TensorFlow Lite格式
  • Flotherm许可状态检查
  • Godot4.3类星露谷游戏开发之【简易库存】(UI部分)
  • HTTPS hostname wrong: should be <xxx>错误解决
  • 【大模型水印论文阅读2】前缀文本编码、均匀性约束
  • Stable Diffusion 3终极提示词库:2000个工业设计场景生成公式(2025企业级实战指南)
  • 强化学习理论基础:从Q-learning到PPO的算法演进(2)
  • openGL学习(基本窗口)
  • [ linux-系统 ] 磁盘与文件系统
  • 【论文阅读 | CVPR 2025 |MambaVision:一种混合 Mamba-Transformer 视觉骨干网络】
  • 2025.6.27总结
  • 机器人 URDF学习笔记
  • Windows 10 ARM64平台CAN程序开发
  • 飞凌A40i使用笔记
  • React中的ErrorBoundary
  • 【Yonghong 企业日常问题08 】永洪BI的Apache Tomcat版本升级指南
  • 【CV数据集介绍-40】Cityscapes 数据集:助力自动驾驶的语义分割神器
  • 攻防世界-MISC-Cephalopod
  • gemini-cli 踩坑实录
  • ARM64 linux系统的一般执行过程
  • C++ 函数特性详解:默认参数、重载、引用与指针区别
  • Flutter 网络请求指南, 从 iOS 到 Flutter 的 Dio + Retrofit 组合
  • 《聊一聊ZXDoc》之汽车服务导向SOME/IP
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 在shell中直接调用使用R
  • 远眺科技工业园区数字孪生方案,如何实现智能管理升级?