{"record":{"id":"ee152df1dc37aac1","repo":"usestrix/strix","slug":"docker-not-available","errorCode":null,"errorMessage":"Docker not available","messagePattern":"Docker not available","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"critical","filePath":"strix/interface/utils.py","lineNumber":1602,"sourceCode":"        console = Console()\n        error_text = Text()\n        error_text.append(\"DOCKER NOT AVAILABLE\", style=\"bold red\")\n        error_text.append(\"\\n\\n\", style=\"white\")\n        error_text.append(\"Cannot connect to Docker daemon.\\n\", style=\"white\")\n        error_text.append(\n            \"Please ensure Docker Desktop is installed and running, and try running strix again.\\n\",\n            style=\"white\",\n        )\n\n        panel = Panel(\n            error_text,\n            title=\"[bold white]STRIX\",\n            title_align=\"left\",\n            border_style=\"red\",\n            padding=(1, 2),\n        )\n        console.print(\"\\n\", panel, \"\\n\")\n        raise RuntimeError(\"Docker not available\") from None\n\n\ndef image_exists(client: Any, image_name: str) -> bool:\n    try:\n        client.images.get(image_name)\n    except ImageNotFound:\n        return False\n    else:\n        return True\n\n\ndef update_layer_status(layers_info: dict[str, str], layer_id: str, layer_status: str) -> None:\n    if \"Pull complete\" in layer_status or \"Already exists\" in layer_status:\n        layers_info[layer_id] = \"✓\"\n    elif \"Downloading\" in layer_status:\n        layers_info[layer_id] = \"↓\"\n    elif \"Extracting\" in layer_status:\n        layers_info[layer_id] = \"📦\"","sourceCodeStart":1584,"sourceCodeEnd":1620,"githubUrl":"https://github.com/usestrix/strix/blob/85513391305171ecc6faffe03da4a8bda5e3febb/strix/interface/utils.py#L1584-L1620","documentation":"check_docker_connection calls docker.from_env(); on DockerException (daemon unreachable, socket missing, permission denied on /var/run/docker.sock) it prints a rich 'DOCKER NOT AVAILABLE' panel with remediation hints, then raises RuntimeError('Docker not available') from None. Strix's scan engine runs inside Docker, so no daemon means no scan.","triggerScenarios":"Docker Desktop not started; docker.sock absent (no daemon installed); current user not in the docker group (permission denied on the socket); DOCKER_HOST pointing at a dead endpoint; rootless daemon not configured.","commonSituations":"Fresh machines with the CLI but no daemon; CI runners where the docker socket isn't mounted into the job container; WSL2 without Docker Desktop running; remote DOCKER_HOST set to a stale IP.","solutions":["Start Docker Desktop (macOS/Windows) or the daemon: sudo systemctl start docker.","Verify access with docker ps in the same shell/user that runs strix.","Add your user to the docker group (sudo usermod -aG docker $USER, then re-login) for socket permission errors.","Unset or fix DOCKER_HOST if it points to an unreachable daemon."],"exampleFix":"# before\n$ strix -n -t ./\nDOCKER NOT AVAILABLE ...\nRuntimeError: Docker not available\n\n# after\n$ sudo systemctl start docker && docker ps   # daemon up and reachable\n$ strix -n -t ./","handlingStrategy":"validation","validationCode":"import shutil\nimport subprocess\n\ndef docker_daemon_reachable() -> bool:\n    if shutil.which(\"docker\") is None:\n        return False\n    try:\n        subprocess.run([\"docker\", \"info\"], check=True, capture_output=True, timeout=15)\n        return True\n    except (subprocess.SubprocessError, OSError):\n        return False\n\nif not docker_daemon_reachable():\n    raise SystemExit(\"Docker daemon unreachable: start Docker Desktop / `systemctl start docker` first\")","typeGuard":null,"tryCatchPattern":"try:\n    client = check_docker_connection()\nexcept RuntimeError as e:\n    if str(e) == \"Docker not available\":\n        raise SystemExit(\"Start the Docker daemon and confirm `docker ps` works, then re-run.\") from e\n    raise","preventionTips":["Add a `docker info` health-check step at the start of CI jobs that run Strix","Ensure the CI runner exposes /var/run/docker.sock or uses a dind service","Add your user to the docker group so the socket is accessible without sudo"],"tags":["docker","environment","sandbox","daemon"],"backgroundTag":null,"analyzedSha":"85513391305171ecc6faffe03da4a8bda5e3febb","analyzedAt":"2026-08-15T05:03:57.275Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}