crawler_81tv/scripts/export-docker.sh
2025-06-08 16:25:53 +08:00

95 lines
2.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 版本号文件
VERSION_FILE=".version"
# 默认镜像名称与build-docker.sh保持一致
DEFAULT_IMAGE_NAME="crawler_zgjs"
# 显示帮助信息
show_help() {
echo "使用方法: $0 [选项]"
echo
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -v, --version 指定版本号(可选,默认使用.version文件中的版本"
echo " -n, --name 指定镜像名称(可选,默认为 $DEFAULT_IMAGE_NAME"
echo " -o, --output 指定输出文件路径(可选,默认为 {镜像名称}-{版本号}.tar"
echo
echo "示例:"
echo " $0 # 使用默认设置导出镜像"
echo " $0 -v 1.0 # 导出指定版本的镜像"
echo " $0 -n custom_name -v 2.0 # 导出指定名称和版本的镜像"
echo " $0 -o /path/to/image.tar # 指定输出文件路径"
}
# 解析命令行参数
VERSION=""
IMAGE_NAME="$DEFAULT_IMAGE_NAME"
OUTPUT_FILE=""
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-v|--version)
VERSION="$2"
shift 2
;;
-n|--name)
IMAGE_NAME="$2"
shift 2
;;
-o|--output)
OUTPUT_FILE="$2"
shift 2
;;
*)
echo "❌ 错误: 未知参数 $1"
show_help
exit 1
;;
esac
done
# 如果未指定版本,从文件读取
if [ -z "$VERSION" ]; then
if [ -f "$VERSION_FILE" ] && [ -s "$VERSION_FILE" ]; then
VERSION=$(cat "$VERSION_FILE")
else
echo "❌ 错误: 未指定版本且无法从 $VERSION_FILE 读取版本号"
exit 1
fi
fi
# 构建完整的镜像标签
TAG="$IMAGE_NAME:$VERSION"
# 如果未指定输出文件,使用默认命名
if [ -z "$OUTPUT_FILE" ]; then
OUTPUT_FILE="${IMAGE_NAME}-${VERSION}.tar"
fi
# 检查镜像是否存在
if ! docker image inspect "$TAG" >/dev/null 2>&1; then
echo "❌ 错误: 镜像 $TAG 不存在"
echo "提示: 请先使用 build-docker.sh 构建镜像"
exit 1
fi
echo "🚀 开始导出Docker镜像..."
echo "📦 镜像: $TAG"
echo "📄 输出: $OUTPUT_FILE"
# 导出镜像
if docker save -o "$OUTPUT_FILE" "$TAG"; then
echo "✅ 导出成功!"
echo "📁 文件大小: $(du -h "$OUTPUT_FILE" | cut -f1)"
else
echo "❌ 导出失败!"
# 如果导出失败,清理可能部分写入的文件
[ -f "$OUTPUT_FILE" ] && rm "$OUTPUT_FILE"
exit 1
fi