parent
e1b19c04b0
commit
932038ab1d
@ -25,8 +25,8 @@ services:
|
||||
- "${FTP_DATA_PORT:-20}:20"
|
||||
- "21100-21110:21100-21110"
|
||||
volumes:
|
||||
- ${DATA_ROOT:-./data}/ftp:/private/argus/ftp
|
||||
- ${DATA_ROOT:-./data}/etc:/private/argus/etc
|
||||
- ${DATA_ROOT:-/private}/argus/metric/ftp:/private/argus/ftp
|
||||
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.30.0.40
|
||||
@ -54,8 +54,8 @@ services:
|
||||
ports:
|
||||
- "${PROMETHEUS_PORT:-9090}:9090"
|
||||
volumes:
|
||||
- ${DATA_ROOT:-./data}/prometheus:/private/argus/metric/prometheus
|
||||
- ${DATA_ROOT:-./data}/etc:/private/argus/etc
|
||||
- ${DATA_ROOT:-/private}/argus/metric/prometheus:/private/argus/metric/prometheus
|
||||
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.30.0.41
|
||||
@ -85,8 +85,8 @@ services:
|
||||
ports:
|
||||
- "${GRAFANA_PORT:-3000}:3000"
|
||||
volumes:
|
||||
- ${DATA_ROOT:-./data}/grafana:/private/argus/metric/grafana
|
||||
- ${DATA_ROOT:-./data}/etc:/private/argus/etc
|
||||
- ${DATA_ROOT:-/private}/argus/metric/grafana:/private/argus/metric/grafana
|
||||
- ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc
|
||||
networks:
|
||||
default:
|
||||
ipv4_address: 172.30.0.42
|
||||
@ -112,7 +112,7 @@ services:
|
||||
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
|
||||
- FTP_PORT=${FTP_PORT:-21}
|
||||
volumes:
|
||||
- ${DATA_ROOT:-./data}/agent:/private/argus/agent
|
||||
- ${DATA_ROOT:-/private}/argus/agent:/private/argus/agent
|
||||
command: sleep infinity
|
||||
networks:
|
||||
default:
|
||||
|
@ -3,8 +3,15 @@ set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
# 解析参数
|
||||
REBUILD_FLAG=""
|
||||
if [[ "$1" == "--rebuild" || "$1" == "-r" ]]; then
|
||||
REBUILD_FLAG="--rebuild"
|
||||
echo "[01] 启用强制重新构建模式"
|
||||
fi
|
||||
|
||||
echo "[01] 启动所有服务..."
|
||||
bash "$SCRIPT_DIR/common/start-all.sh"
|
||||
bash "$SCRIPT_DIR/common/start-all.sh" $REBUILD_FLAG
|
||||
|
||||
echo "[01] 等待服务就绪..."
|
||||
sleep 5
|
||||
|
@ -22,70 +22,55 @@ PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
|
||||
PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
|
||||
GRAFANA_UID=${GRAFANA_UID:-2133}
|
||||
GRAFANA_GID=${GRAFANA_GID:-2015}
|
||||
DATA_ROOT=${DATA_ROOT:-$TEST_DIR/data}
|
||||
DATA_ROOT=${DATA_ROOT:-/private}
|
||||
|
||||
echo "开始初始化目录结构..."
|
||||
echo "数据目录: ${DATA_ROOT}"
|
||||
echo "数据根目录: ${DATA_ROOT}"
|
||||
echo ""
|
||||
|
||||
# 创建 FTP 目录
|
||||
echo "创建 FTP 目录..."
|
||||
sudo mkdir -p ${DATA_ROOT}/ftp/share
|
||||
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/ftp
|
||||
sudo chmod -R 755 ${DATA_ROOT}/ftp
|
||||
sudo mkdir -p ${DATA_ROOT}/argus/metric/ftp/share
|
||||
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/metric/ftp
|
||||
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/ftp
|
||||
|
||||
# 创建 Prometheus 目录
|
||||
echo "创建 Prometheus 目录..."
|
||||
sudo mkdir -p ${DATA_ROOT}/prometheus/{data,rules,targets}
|
||||
|
||||
# 创建默认的 targets 文件(先创建文件再改权限)
|
||||
if [ ! -f "${DATA_ROOT}/prometheus/targets/node_exporter.json" ]; then
|
||||
echo "创建默认 node_exporter targets..."
|
||||
echo '[
|
||||
{
|
||||
"targets": [],
|
||||
"labels": {
|
||||
"job": "node"
|
||||
}
|
||||
}
|
||||
]' | sudo tee ${DATA_ROOT}/prometheus/targets/node_exporter.json > /dev/null
|
||||
fi
|
||||
|
||||
if [ ! -f "${DATA_ROOT}/prometheus/targets/dcgm_exporter.json" ]; then
|
||||
echo "创建默认 dcgm_exporter targets..."
|
||||
echo '[
|
||||
{
|
||||
"targets": [],
|
||||
"labels": {
|
||||
"job": "dcgm"
|
||||
}
|
||||
}
|
||||
]' | sudo tee ${DATA_ROOT}/prometheus/targets/dcgm_exporter.json > /dev/null
|
||||
fi
|
||||
sudo mkdir -p ${DATA_ROOT}/argus/metric/prometheus/{data,rules,targets}
|
||||
|
||||
# 统一设置 Prometheus 目录权限
|
||||
sudo chown -R ${PROMETHEUS_UID}:${PROMETHEUS_GID} ${DATA_ROOT}/prometheus
|
||||
sudo chmod -R 755 ${DATA_ROOT}/prometheus
|
||||
sudo chown -R ${PROMETHEUS_UID}:${PROMETHEUS_GID} ${DATA_ROOT}/argus/metric/prometheus
|
||||
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/prometheus
|
||||
|
||||
# 创建 Grafana 目录
|
||||
echo "创建 Grafana 目录..."
|
||||
sudo mkdir -p ${DATA_ROOT}/grafana/{data,logs,plugins,provisioning/datasources,provisioning/dashboards,data/sessions,data/dashboards,config}
|
||||
sudo chown -R ${GRAFANA_UID}:${GRAFANA_GID} ${DATA_ROOT}/grafana
|
||||
sudo chmod -R 755 ${DATA_ROOT}/grafana
|
||||
sudo mkdir -p ${DATA_ROOT}/argus/metric/grafana/{data,logs,plugins,provisioning/datasources,provisioning/dashboards,data/sessions,data/dashboards,config}
|
||||
sudo chown -R ${GRAFANA_UID}:${GRAFANA_GID} ${DATA_ROOT}/argus/metric/grafana
|
||||
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/grafana
|
||||
|
||||
# 创建公共配置目录
|
||||
sudo mkdir -p ${DATA_ROOT}/etc
|
||||
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/etc
|
||||
sudo chmod -R 755 ${DATA_ROOT}/etc
|
||||
echo "创建公共配置目录..."
|
||||
sudo mkdir -p ${DATA_ROOT}/argus/etc
|
||||
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/etc
|
||||
sudo chmod -R 755 ${DATA_ROOT}/argus/etc
|
||||
|
||||
# 创建 Agent 目录
|
||||
echo "创建 Agent 目录..."
|
||||
sudo mkdir -p ${DATA_ROOT}/argus/agent
|
||||
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/agent
|
||||
sudo chmod -R 755 ${DATA_ROOT}/argus/agent
|
||||
|
||||
echo "目录初始化完成!"
|
||||
echo ""
|
||||
echo "目录结构:"
|
||||
echo " ${DATA_ROOT}/"
|
||||
echo " ├── ftp/ (UID:${FTP_UID}, GID:${FTP_GID})"
|
||||
echo " ├── prometheus/ (UID:${PROMETHEUS_UID}, GID:${PROMETHEUS_GID})"
|
||||
echo " ├── grafana/ (UID:${GRAFANA_UID}, GID:${GRAFANA_GID})"
|
||||
echo " └── etc/ (UID:${FTP_UID}, GID:${FTP_GID})"
|
||||
echo " ├── argus/"
|
||||
echo " │ ├── metric/"
|
||||
echo " │ │ ├── ftp/ (UID:${FTP_UID}, GID:${FTP_GID})"
|
||||
echo " │ │ ├── prometheus/ (UID:${PROMETHEUS_UID}, GID:${PROMETHEUS_GID})"
|
||||
echo " │ │ └── grafana/ (UID:${GRAFANA_UID}, GID:${GRAFANA_GID})"
|
||||
echo " │ ├── etc/ (UID:${FTP_UID}, GID:${FTP_GID})"
|
||||
echo " │ └── agent/ (UID:${FTP_UID}, GID:${FTP_GID})"
|
||||
echo ""
|
||||
echo "您现在可以运行 'docker-compose up -d' 来启动所有服务"
|
||||
|
||||
|
@ -9,6 +9,12 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$TEST_DIR"
|
||||
|
||||
# 解析参数
|
||||
FORCE_REBUILD=false
|
||||
if [[ "$1" == "--rebuild" ]]; then
|
||||
FORCE_REBUILD=true
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
echo " Argus Metrics 一键启动脚本"
|
||||
echo "=========================================="
|
||||
@ -22,19 +28,13 @@ if ! command -v docker &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检测 docker-compose 命令(兼容新旧版本)
|
||||
COMPOSE_FILE="$TEST_DIR/docker-compose.yml"
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE"
|
||||
echo "使用: docker-compose"
|
||||
elif docker compose version &> /dev/null 2>&1; then
|
||||
DOCKER_COMPOSE="docker compose -f $COMPOSE_FILE"
|
||||
echo "使用: docker compose"
|
||||
else
|
||||
echo "错误: 未找到 docker-compose 或 docker compose 命令"
|
||||
# 检查 docker compose 命令
|
||||
if ! docker compose version &> /dev/null 2>&1; then
|
||||
echo "错误: 未找到 docker compose 命令,请确保 Docker Compose V2 已安装"
|
||||
exit 1
|
||||
fi
|
||||
echo "Compose 文件: $COMPOSE_FILE"
|
||||
echo "使用: docker compose"
|
||||
echo "Compose 文件: $TEST_DIR/docker-compose.yml"
|
||||
echo ""
|
||||
|
||||
# 检查必要的构建目录
|
||||
@ -86,7 +86,7 @@ echo "2. 准备 Docker 镜像..."
|
||||
|
||||
# 检查镜像是否存在
|
||||
IMAGE_CACHE_DIR="$TEST_DIR/images-cache"
|
||||
IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest")
|
||||
IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "ubuntu:22.04")
|
||||
all_images_exist=true
|
||||
|
||||
for image in "${IMAGES[@]}"; do
|
||||
@ -96,7 +96,12 @@ for image in "${IMAGES[@]}"; do
|
||||
fi
|
||||
done
|
||||
|
||||
if $all_images_exist; then
|
||||
if $FORCE_REBUILD; then
|
||||
echo "强制重新构建镜像(--rebuild 模式)..."
|
||||
cd "$TEST_DIR"
|
||||
docker compose build --no-cache
|
||||
echo "镜像重新构建完成"
|
||||
elif $all_images_exist; then
|
||||
echo "所有镜像已存在,跳过构建"
|
||||
else
|
||||
echo "检测到缺失镜像,尝试从缓存加载..."
|
||||
@ -117,6 +122,9 @@ else
|
||||
"argus-metric-grafana:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-grafana.tar"
|
||||
;;
|
||||
"ubuntu:22.04")
|
||||
cache_file="${IMAGE_CACHE_DIR}/test-node.tar"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -f "$cache_file" ]; then
|
||||
@ -142,7 +150,7 @@ else
|
||||
echo "部分镜像缺失,开始构建..."
|
||||
echo "工作目录: $(pwd)"
|
||||
cd "$TEST_DIR"
|
||||
$DOCKER_COMPOSE build
|
||||
docker compose build
|
||||
|
||||
# 询问是否保存镜像
|
||||
echo ""
|
||||
@ -162,6 +170,9 @@ else
|
||||
"argus-metric-grafana:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-grafana.tar" "$image" && echo " 已保存: argus-grafana.tar"
|
||||
;;
|
||||
"ubuntu:22.04")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/test-node.tar" "$image" && echo " 已保存: test-node.tar"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo "镜像已保存到: $IMAGE_CACHE_DIR/"
|
||||
@ -174,8 +185,8 @@ fi
|
||||
|
||||
echo ""
|
||||
echo "3. 启动服务..."
|
||||
cd "$SCRIPT_DIR"
|
||||
$DOCKER_COMPOSE up -d
|
||||
cd "$TEST_DIR"
|
||||
docker compose up -d
|
||||
|
||||
echo ""
|
||||
echo "4. 等待服务启动..."
|
||||
@ -183,8 +194,8 @@ sleep 5
|
||||
|
||||
echo ""
|
||||
echo "5. 检查服务状态..."
|
||||
cd "$SCRIPT_DIR"
|
||||
$DOCKER_COMPOSE ps
|
||||
cd "$TEST_DIR"
|
||||
docker compose ps
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
@ -203,10 +214,10 @@ echo " 用户名: admin"
|
||||
echo " 密码: admin"
|
||||
echo ""
|
||||
echo "常用命令:"
|
||||
echo " 查看日志: $DOCKER_COMPOSE logs -f [service]"
|
||||
echo " 停止服务: $DOCKER_COMPOSE stop"
|
||||
echo " 重启服务: $DOCKER_COMPOSE restart"
|
||||
echo " 停止并删除: $DOCKER_COMPOSE down"
|
||||
echo " 停止并删除卷: $DOCKER_COMPOSE down -v"
|
||||
echo " 查看日志: docker compose logs -f [service]"
|
||||
echo " 停止服务: docker compose stop"
|
||||
echo " 重启服务: docker compose restart"
|
||||
echo " 停止并删除: docker compose down"
|
||||
echo " 停止并删除卷: docker compose down -v"
|
||||
echo ""
|
||||
|
||||
|
@ -8,14 +8,9 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$TEST_DIR"
|
||||
|
||||
# 检测 docker-compose 命令(兼容新旧版本)
|
||||
COMPOSE_FILE="$TEST_DIR/docker-compose.yml"
|
||||
if command -v docker-compose &> /dev/null; then
|
||||
DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE"
|
||||
elif docker compose version &> /dev/null 2>&1; then
|
||||
DOCKER_COMPOSE="docker compose -f $COMPOSE_FILE"
|
||||
else
|
||||
echo "错误: 未找到 docker-compose 或 docker compose 命令"
|
||||
# 检查 docker compose 命令
|
||||
if ! docker compose version &> /dev/null 2>&1; then
|
||||
echo "错误: 未找到 docker compose 命令,请确保 Docker Compose V2 已安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -23,23 +18,26 @@ echo "=========================================="
|
||||
echo " 停止 Argus Metrics 服务"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "使用: docker compose"
|
||||
echo "Compose 文件: $TEST_DIR/docker-compose.yml"
|
||||
echo ""
|
||||
|
||||
# 检查是否有运行的容器
|
||||
if [ "$($DOCKER_COMPOSE ps -q)" ]; then
|
||||
if [ "$(docker compose ps -q)" ]; then
|
||||
echo "停止所有服务..."
|
||||
$DOCKER_COMPOSE stop
|
||||
docker compose stop
|
||||
|
||||
echo ""
|
||||
read -p "是否要删除容器? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
$DOCKER_COMPOSE down
|
||||
docker compose down
|
||||
echo "容器已删除"
|
||||
|
||||
read -p "是否要删除数据卷? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
$DOCKER_COMPOSE down -v
|
||||
docker compose down -v
|
||||
echo "数据卷已删除"
|
||||
fi
|
||||
fi
|
||||
|
109
src/metric/tests/scripts/load-images.sh
Executable file
109
src/metric/tests/scripts/load-images.sh
Executable file
@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 镜像加载脚本
|
||||
# 用于从 tar 文件加载 Docker 镜像
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
INPUT_DIR="${1:-$TEST_DIR/images-cache}"
|
||||
|
||||
echo "=========================================="
|
||||
echo " Docker 镜像加载脚本"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "输入目录: $INPUT_DIR"
|
||||
echo ""
|
||||
|
||||
# 检查输入目录是否存在
|
||||
if [ ! -d "$INPUT_DIR" ]; then
|
||||
echo "错误: 目录不存在: $INPUT_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 定义要加载的镜像文件和期望的镜像名称
|
||||
declare -A IMAGES=(
|
||||
["argus-ftp.tar"]="argus-metric-ftp:latest"
|
||||
["argus-prometheus.tar"]="argus-metric-prometheus:latest"
|
||||
["argus-grafana.tar"]="argus-metric-grafana:latest"
|
||||
["test-node.tar"]="ubuntu:22.04"
|
||||
)
|
||||
|
||||
# 加载镜像
|
||||
total=0
|
||||
success=0
|
||||
skipped=0
|
||||
failed=0
|
||||
|
||||
for tar_file in "${!IMAGES[@]}"; do
|
||||
total=$((total + 1))
|
||||
input_file="${INPUT_DIR}/${tar_file}"
|
||||
image_name="${IMAGES[$tar_file]}"
|
||||
|
||||
echo "[$total] 处理: $tar_file"
|
||||
|
||||
# 检查 tar 文件是否存在
|
||||
if [ ! -f "$input_file" ]; then
|
||||
echo " ✗ 文件不存在: $tar_file"
|
||||
failed=$((failed + 1))
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
# 检查镜像是否已存在
|
||||
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
|
||||
echo " ⊙ 镜像已存在: $image_name (跳过)"
|
||||
skipped=$((skipped + 1))
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
# 加载镜像
|
||||
echo " → 加载镜像..."
|
||||
if docker load -i "$input_file"; then
|
||||
# 验证加载后的镜像
|
||||
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
|
||||
echo " ✓ 加载成功: $image_name"
|
||||
success=$((success + 1))
|
||||
else
|
||||
echo " ⚠ 加载完成,但镜像名称可能不匹配"
|
||||
echo " 请检查: docker images | grep '${image_name%:*}'"
|
||||
success=$((success + 1))
|
||||
fi
|
||||
else
|
||||
echo " ✗ 加载失败: $tar_file"
|
||||
failed=$((failed + 1))
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "=========================================="
|
||||
echo " 加载完成"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "统计:"
|
||||
echo " 总计: $total"
|
||||
echo " 成功: $success"
|
||||
echo " 跳过: $skipped"
|
||||
echo " 失败: $failed"
|
||||
echo ""
|
||||
|
||||
# 显示当前的镜像
|
||||
echo "当前 Argus 相关镜像:"
|
||||
docker images | grep -E "REPOSITORY|argus-metric" || echo "未找到 argus-metric 镜像"
|
||||
echo ""
|
||||
|
||||
if [ $failed -gt 0 ]; then
|
||||
echo "部分镜像加载失败,请检查!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $success -gt 0 ]; then
|
||||
echo "✓ 镜像加载成功!"
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 运行: bash scripts/common/start-all.sh"
|
||||
echo " 或者: docker-compose up -d"
|
||||
fi
|
||||
|
93
src/metric/tests/scripts/save-images.sh
Executable file
93
src/metric/tests/scripts/save-images.sh
Executable file
@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 镜像保存脚本
|
||||
# 用于保存 Docker 镜像到 tar 文件,便于离线部署
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
OUTPUT_DIR="${1:-$TEST_DIR/images-cache}"
|
||||
|
||||
echo "=========================================="
|
||||
echo " Docker 镜像保存脚本"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "输出目录: $OUTPUT_DIR"
|
||||
echo ""
|
||||
|
||||
# 创建输出目录
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# 定义镜像名称(与 docker-compose.yml 保持一致)
|
||||
declare -A IMAGES=(
|
||||
["argus-metric-ftp:latest"]="argus-ftp.tar"
|
||||
["argus-metric-prometheus:latest"]="argus-prometheus.tar"
|
||||
["argus-metric-grafana:latest"]="argus-grafana.tar"
|
||||
["ubuntu:22.04"]="test-node.tar"
|
||||
)
|
||||
|
||||
# 检查镜像是否存在并保存
|
||||
total=0
|
||||
success=0
|
||||
failed=0
|
||||
|
||||
for image in "${!IMAGES[@]}"; do
|
||||
total=$((total + 1))
|
||||
output_file="${OUTPUT_DIR}/${IMAGES[$image]}"
|
||||
|
||||
echo "[$total] 检查镜像: $image"
|
||||
|
||||
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then
|
||||
echo " ✓ 镜像存在,开始保存..."
|
||||
if docker save -o "$output_file" "$image"; then
|
||||
file_size=$(ls -lh "$output_file" | awk '{print $5}')
|
||||
echo " ✓ 保存成功: ${IMAGES[$image]} ($file_size)"
|
||||
success=$((success + 1))
|
||||
else
|
||||
echo " ✗ 保存失败: $image"
|
||||
failed=$((failed + 1))
|
||||
fi
|
||||
else
|
||||
echo " ✗ 镜像不存在,请先构建镜像"
|
||||
failed=$((failed + 1))
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "=========================================="
|
||||
echo " 保存完成"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "统计:"
|
||||
echo " 总计: $total"
|
||||
echo " 成功: $success"
|
||||
echo " 失败: $failed"
|
||||
echo ""
|
||||
echo "输出目录: $OUTPUT_DIR"
|
||||
echo ""
|
||||
|
||||
if [ $success -gt 0 ]; then
|
||||
echo "已保存的文件:"
|
||||
ls -lh "$OUTPUT_DIR"/*.tar 2>/dev/null || true
|
||||
echo ""
|
||||
echo "文件列表:"
|
||||
for image in "${!IMAGES[@]}"; do
|
||||
output_file="${OUTPUT_DIR}/${IMAGES[$image]}"
|
||||
if [ -f "$output_file" ]; then
|
||||
file_size=$(ls -lh "$output_file" | awk '{print $5}')
|
||||
echo " - ${IMAGES[$image]} ($file_size)"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "使用说明:"
|
||||
echo "1. 将 images-cache 目录复制到目标服务器的 ~/argus/src/metric/tests/ 下"
|
||||
echo "2. 在目标服务器运行: bash scripts/common/start-all.sh"
|
||||
echo ""
|
||||
|
||||
if [ $failed -gt 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user