@echo off setlocal enabledelayedexpansion REM Docker构建脚本 (Windows版本) set "SCRIPT_NAME=%~n0" REM 颜色定义 (Windows CMD不支持ANSI颜色,但保留结构) set "RED=[ERROR]" set "GREEN=[INFO]" set "YELLOW=[WARNING]" REM 打印带标签的消息 :print_message echo %GREEN% %~1 goto :eof :print_warning echo %YELLOW% %~1 goto :eof :print_error echo %RED% %~1 goto :eof REM 检查Docker是否运行 :check_docker docker info >nul 2>&1 if errorlevel 1 ( call :print_error "Docker未运行,请启动Docker服务" exit /b 1 ) goto :eof REM 清理旧的镜像和容器 :cleanup call :print_message "清理旧的Docker资源..." docker system prune -f goto :eof REM 构建镜像 :build_image set "tag=%~1" if "%tag%"=="" set "tag=koa3-demo:latest" call :print_message "构建Docker镜像: %tag%" docker build --target production --tag "%tag%" --build-arg BUILDKIT_INLINE_CACHE=1 . if errorlevel 1 ( call :print_error "镜像构建失败" exit /b 1 ) call :print_message "镜像构建成功: %tag%" goto :eof REM 运行容器 :run_container set "tag=%~1" if "%tag%"=="" set "tag=koa3-demo:latest" call :print_message "启动容器..." docker run -d --name koa3-demo --publish 3000:3000 --volume "%cd%\database:/app/database" --volume "%cd%\logs:/app/logs" --env NODE_ENV=production --env BUN_ENV=production --env PORT=3000 "%tag%" if errorlevel 1 ( call :print_error "容器启动失败" exit /b 1 ) call :print_message "容器启动成功" call :print_message "应用运行在: http://localhost:3000" goto :eof REM 使用docker-compose :use_compose call :print_message "使用docker-compose启动服务..." docker-compose up -d --build if errorlevel 1 ( call :print_error "服务启动失败" exit /b 1 ) call :print_message "服务启动成功" call :print_message "应用运行在: http://localhost:3000" goto :eof REM 显示帮助信息 :show_help echo 用法: %SCRIPT_NAME% [选项] echo. echo 选项: echo build [tag] 构建Docker镜像 echo run [tag] 运行容器 echo compose 使用docker-compose启动服务 echo cleanup 清理Docker资源 echo help 显示此帮助信息 echo. echo 示例: echo %SCRIPT_NAME% build 构建镜像 echo %SCRIPT_NAME% build v1.0 构建带标签的镜像 echo %SCRIPT_NAME% run 运行容器 echo %SCRIPT_NAME% compose 使用docker-compose启动 goto :eof REM 主函数 :main call :check_docker if errorlevel 1 exit /b 1 set "action=%~1" if "%action%"=="" set "action=help" if "%action%"=="build" ( call :build_image "%~2" ) else if "%action%"=="run" ( call :run_container "%~2" ) else if "%action%"=="compose" ( call :use_compose ) else if "%action%"=="cleanup" ( call :cleanup ) else if "%action%"=="help" ( call :show_help ) else ( call :show_help ) exit /b 0