fix: improve docker detection in startup script

This commit is contained in:
2026-04-23 10:05:20 +08:00
parent 5e4fdeb14f
commit 8b363ebbb7

View File

@@ -5,15 +5,22 @@ set "ROOT=%~dp0"
cd /d "%ROOT%" cd /d "%ROOT%"
echo [1/6] Checking Docker... echo [1/6] Checking Docker...
where docker >nul 2>nul set "DOCKER_EXE="
if errorlevel 1 ( set "DOCKER_DESKTOP_EXE="
echo Docker Desktop was not found in PATH. 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 pause
exit /b 1 exit /b 1
) )
call :ensure_docker_ready
if errorlevel 1 exit /b 1
echo [2/6] Starting mysql, redis and minio... 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 ( if errorlevel 1 (
echo Failed to start docker services. echo Failed to start docker services.
pause pause
@@ -84,3 +91,73 @@ echo API: http://localhost:8000
echo. echo.
echo Two windows have been opened for backend and frontend. echo Two windows have been opened for backend and frontend.
pause 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