6d3e7a9315
CI / test (push) Failing after 8m51s
Move docker build/push from deploy-ift to CI (EventHubBack pattern). Deploy no longer needs docker.sock on the WSL runner. Add ensure-docker-daemon.sh for Docker Desktop on host runner.
66 lines
1.8 KiB
Bash
66 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
|
# Ensure Docker daemon is reachable on WSL host runner (Docker Desktop integration).
|
|
# Usage: ensure-docker-daemon.sh [max_wait_seconds]
|
|
set -euo pipefail
|
|
|
|
MAX_WAIT="${1:-240}"
|
|
INTERVAL=5
|
|
DEADLINE=$((SECONDS + MAX_WAIT))
|
|
|
|
docker_ok() {
|
|
timeout 8 docker info >/dev/null 2>&1
|
|
}
|
|
|
|
find_docker_host() {
|
|
local candidates=(
|
|
"${DOCKER_HOST:-}"
|
|
"unix:///var/run/docker.sock"
|
|
"unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.sock"
|
|
"unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.proxy.sock"
|
|
"unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.container-proxy.sock"
|
|
)
|
|
local host path
|
|
for host in "${candidates[@]}"; do
|
|
[[ -n "${host}" ]] || continue
|
|
path="${host#unix://}"
|
|
if [[ -S "${path}" ]] && DOCKER_HOST="${host}" docker_ok; then
|
|
export DOCKER_HOST="${host}"
|
|
echo "Docker ready (${host})"
|
|
return 0
|
|
fi
|
|
done
|
|
if docker_ok; then
|
|
echo "Docker ready (default socket)"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
start_docker_desktop() {
|
|
local exe="/mnt/c/Program Files/Docker/Docker/Docker Desktop.exe"
|
|
if [[ -f "${exe}" ]]; then
|
|
echo "Starting Docker Desktop..."
|
|
powershell.exe -NoProfile -Command "Start-Process 'C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe'" >/dev/null 2>&1 || true
|
|
return 0
|
|
fi
|
|
echo "Docker Desktop executable not found"
|
|
return 1
|
|
}
|
|
|
|
attempt=0
|
|
while (( SECONDS < DEADLINE )); do
|
|
attempt=$((attempt + 1))
|
|
if find_docker_host; then
|
|
exit 0
|
|
fi
|
|
if (( attempt == 1 || attempt == 7 )); then
|
|
start_docker_desktop || true
|
|
fi
|
|
echo "waiting for docker (${attempt}, $((DEADLINE - SECONDS))s left)..."
|
|
sleep "${INTERVAL}"
|
|
done
|
|
|
|
echo "Docker daemon not available after ${MAX_WAIT}s"
|
|
echo "Hint: start Docker Desktop on Windows and enable WSL integration."
|
|
exit 1
|