diff --git a/start-aivideo.bat b/start-aivideo.bat index d64b87c..4a29a00 100644 --- a/start-aivideo.bat +++ b/start-aivideo.bat @@ -5,15 +5,22 @@ set "ROOT=%~dp0" cd /d "%ROOT%" echo [1/6] Checking Docker... -where docker >nul 2>nul -if errorlevel 1 ( - echo Docker Desktop was not found in PATH. +set "DOCKER_EXE=" +set "DOCKER_DESKTOP_EXE=" +call :resolve_docker + +if not defined DOCKER_EXE ( + echo Docker CLI was not found. + echo Install Docker Desktop, or add docker.exe to PATH, then rerun this script. pause exit /b 1 ) +call :ensure_docker_ready +if errorlevel 1 exit /b 1 + echo [2/6] Starting mysql, redis and minio... -docker compose up -d mysql redis minio +call "%DOCKER_EXE%" compose up -d mysql redis minio if errorlevel 1 ( echo Failed to start docker services. pause @@ -84,3 +91,73 @@ echo API: http://localhost:8000 echo. echo Two windows have been opened for backend and frontend. pause +goto :eof + +:resolve_docker +for /f "delims=" %%I in ('where docker 2^>nul') do ( + if not defined DOCKER_EXE set "DOCKER_EXE=%%~fI" +) + +if defined DOCKER_EXE goto resolve_desktop + +for %%I in ( + "%ProgramFiles%\Docker\Docker\resources\bin\docker.exe" + "%ProgramFiles%\Docker\Docker\resources\bin\com.docker.cli.exe" + "%ProgramW6432%\Docker\Docker\resources\bin\docker.exe" + "%ProgramW6432%\Docker\Docker\resources\bin\com.docker.cli.exe" + "%LocalAppData%\Programs\Docker\Docker\resources\bin\docker.exe" + "%LocalAppData%\Programs\Docker\Docker\resources\bin\com.docker.cli.exe" +) do ( + if exist "%%~fI" ( + set "DOCKER_EXE=%%~fI" + goto resolve_desktop + ) +) + +:resolve_desktop +for %%I in ( + "%ProgramFiles%\Docker\Docker\Docker Desktop.exe" + "%ProgramW6432%\Docker\Docker\Docker Desktop.exe" + "%LocalAppData%\Programs\Docker\Docker\Docker Desktop.exe" +) do ( + if exist "%%~fI" ( + set "DOCKER_DESKTOP_EXE=%%~fI" + goto :eof + ) +) + +goto :eof + +:ensure_docker_ready +call "%DOCKER_EXE%" info >nul 2>nul +if not errorlevel 1 exit /b 0 + +if defined DOCKER_DESKTOP_EXE ( + echo Docker Desktop is installed but not ready. Starting it now... + start "" "%DOCKER_DESKTOP_EXE%" + call :wait_for_docker 60 + if not errorlevel 1 exit /b 0 + + echo Docker Desktop did not become ready in time. + echo Wait for Docker Desktop to finish starting, then rerun this script. + pause + exit /b 1 +) + +echo Docker CLI was found, but the Docker engine is not ready. +echo Start Docker Desktop or Docker Engine, then rerun this script. +pause +exit /b 1 + +:wait_for_docker +set "DOCKER_WAIT_REMAINING=%~1" +if not defined DOCKER_WAIT_REMAINING set "DOCKER_WAIT_REMAINING=60" + +:wait_for_docker_loop +call "%DOCKER_EXE%" info >nul 2>nul +if not errorlevel 1 exit /b 0 +if %DOCKER_WAIT_REMAINING% LEQ 0 exit /b 1 + +timeout /t 2 /nobreak >nul +set /a DOCKER_WAIT_REMAINING-=2 +goto wait_for_docker_loop