Source code for wauth.drivers.docker

"""Docker driver for reading container-injected secrets.

Reads secrets from the filesystem path used by Docker Swarm or
Docker Compose secret management (``/run/secrets`` by default).
"""

import os

from .._log import _debug, _error, _info, _warning


[docs] class DockerDriver: """Driver for reading secrets from a Docker container's filesystem. Docker injects secrets as files under ``/run/secrets``. This driver reads from that path when running inside a container. Note: This driver is **read-only**. Writing secrets is handled by :class:`LocalDriver`. Args: secrets_path: Base path where Docker secrets are mounted. Defaults to ``/run/secrets``. """
[docs] def __init__(self, secrets_path: str = "/run/secrets") -> None: self.secrets_path: str = secrets_path _debug(f"DockerDriver initialized with secrets_path='{secrets_path}'")
[docs] def get_secret(self, key: str) -> str | None: """Read a secret from the Docker secrets filesystem. Args: key: Name of the secret (corresponds to filename). Returns: Stripped secret content, or ``None`` if not found. """ path = os.path.join(self.secrets_path, key) if os.path.exists(path): with open(path, encoding="utf-8") as f: content = f.read().strip() _debug(f"Docker secret read: key='{key}'") return content _debug(f"Docker secret not found: key='{key}' at path='{path}'") return None
[docs] def is_docker(self) -> bool: """Check if the process is running inside a Docker container. Returns: ``True`` if Docker indicators are present in the filesystem. """ is_container = os.path.exists("/.dockerenv") or os.path.exists( "/proc/self/cgroup" ) _debug(f"Docker container detection: {is_container}") return is_container