diff --git a/tox_docker/plugin.py b/tox_docker/plugin.py index b6e38c4..4c271f0 100644 --- a/tox_docker/plugin.py +++ b/tox_docker/plugin.py @@ -23,6 +23,7 @@ from tox.tox_env.api import ToxEnv from tox.tox_env.errors import Fail import docker as docker_module +import docker.utils from tox_docker.config import ( ContainerConfig, @@ -40,6 +41,22 @@ class HealthCheckFailed(Exception): pass +def docker_client(): + # docker.from_env() ignores the current context configuration. + # https://github.com/docker/docker-py/issues/3146 + + ctx = docker_module.ContextAPI.get_current_context() + + params = docker_module.utils.kwargs_from_env(os.environ) + params.setdefault("base_url", ctx.Host) + + docker = docker_module.DockerClient( + version="auto", + **params, + ) + return docker + + def get_gateway_ip(container: Container) -> str: gateway = os.getenv("TOX_DOCKER_GATEWAY") if gateway: @@ -124,7 +141,7 @@ def docker_build_or_pull(container_config: ContainerConfig) -> None: def docker_pull(container_config: ContainerConfig) -> None: assert container_config.image - docker = docker_module.from_env(version="auto") + docker = docker_client() try: docker.images.get(str(container_config.image)) @@ -163,7 +180,7 @@ def docker_run( container_config: ContainerConfig, running_containers: RunningContainers, ) -> Container: - docker = docker_module.from_env(version="auto") + docker = docker_client() healthcheck: Dict[str, Union[List[str], int]] = {} if container_config.healthcheck_cmd: @@ -215,8 +232,6 @@ def docker_run( def docker_health_check( container_config: ContainerConfig, container: Container ) -> None: - docker = docker_module.from_env(version="auto") - if "Health" in container.attrs["State"]: log(f"health check {container_config.name!r}") while True: @@ -241,7 +256,7 @@ def docker_stop(container_config: ContainerConfig, container: Container) -> None def docker_get(container_config: ContainerConfig) -> Optional[Container]: - docker = docker_module.from_env(version="auto") + docker = docker_client() try: return docker.containers.get(container_config.runas_name) except NotFound: