Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions tox_docker/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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:
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down