Source code for minitrino.core.docker.socket

"""Resolve the Docker socket to use.

For internal and external use (e.g. CLI and tests).
"""

from __future__ import annotations

import json
import os
import subprocess
from typing import TYPE_CHECKING

from minitrino.core.errors import MinitrinoError

if TYPE_CHECKING:
    from minitrino.core.context import MinitrinoContext


[docs] def get_docker_context_name(ctx: MinitrinoContext | None = None, env=None) -> str: """Return the name of the active Docker context. Parameters ---------- ctx : MinitrinoContext, optional The MinitrinoContext object to use for executing commands. Defaults to None. env : dict, optional Dictionary of environment variables to use when resolving the Docker context. Defaults to None. Returns ------- str The name of the active Docker context (e.g., "orbstack", "desktop-linux", "default"). Returns empty string if unable to determine. """ if env is None: env = os.environ try: if ctx is None: subproc_result = subprocess.run( ["docker", "context", "inspect"], capture_output=True, check=True, text=True, env=env, ) stdout = subproc_result.stdout else: try: cmd_results = ctx.cmd_executor.execute( ["docker", "context", "inspect"], environment=env, suppress_output=True, ) if not cmd_results: return "" stdout = cmd_results[0].output except Exception: return "" context = json.loads(stdout)[0] return context.get("Name", "") except Exception: return ""
[docs] def resolve_docker_socket(ctx: MinitrinoContext | None = None, env=None) -> str: """Return the Docker socket to use, preferring DOCKER_HOST if set. Parameters ---------- ctx : MinitrinoContext, optional The MinitrinoContext object to use for executing commands. Defaults to None. env : dict, optional Dictionary of environment variables to use when resolving the Docker socket. Defaults to None. Returns ------- str The Docker socket to use. Raises ------ MinitrinoError If the Docker socket cannot be determined. """ if env is None: env = os.environ socket_path = env.get("DOCKER_HOST") if socket_path: return socket_path try: if ctx is None: subproc_result = subprocess.run( ["docker", "context", "inspect"], capture_output=True, check=True, text=True, env=env, ) stdout = subproc_result.stdout else: try: cmd_results = ctx.cmd_executor.execute( ["docker", "context", "inspect"], environment=env, suppress_output=True, ) if not cmd_results: raise MinitrinoError("No results from docker context inspect") stdout = cmd_results[0].output except Exception as e: raise MinitrinoError( "Error raised trying to resolve Docker socket." ) from e context = json.loads(stdout)[0] return context["Endpoints"]["docker"].get("Host", "") except Exception as e: raise MinitrinoError("Failed to determine Docker socket.") from e