fix: improve docker detection in startup script
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user