#!/usr/bin/env bash set -euo pipefail PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${PROJECT_DIR}" if ! command -v docker >/dev/null 2>&1; then echo "未检测到 docker,请先安装 Docker Desktop 或 Docker Engine。" exit 1 fi if ! docker info >/dev/null 2>&1; then echo "Docker 未启动,请先启动后重试。" exit 1 fi if docker compose version >/dev/null 2>&1; then COMPOSE_CMD=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then COMPOSE_CMD=(docker-compose) else echo "未检测到 docker compose,请安装后重试。" exit 1 fi export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1 find_free_port() { local port="$1" while lsof -nP -iTCP:"${port}" -sTCP:LISTEN >/dev/null 2>&1; do port=$((port + 1)) done echo "${port}" } HOST_PORT="$(find_free_port 5180)" export HOST_PORT echo "==> 使用国内镜像源构建并启动 VFXdemo" echo " - Node 基础镜像: docker.m.daocloud.io" echo " - npm registry: registry.npmmirror.com" echo " - Host 端口: ${HOST_PORT}" "${COMPOSE_CMD[@]}" build --pull "${COMPOSE_CMD[@]}" up -d echo echo "启动完成: http://localhost:${HOST_PORT}" echo "查看日志: ${COMPOSE_CMD[*]} logs -f" echo "停止服务: ${COMPOSE_CMD[*]} down"