66from pathlib import Path
77from typing import Optional , Union
88
9+ import docker
10+
911
1012class ConnectionMode (Enum ):
1113 bridge_ip = "bridge_ip"
@@ -24,14 +26,30 @@ def use_mapped_port(self) -> bool:
2426 return True
2527
2628
29+ def get_docker_socket () -> str :
30+ """
31+ Determine the docker socket, prefer value given by env variable
32+
33+ Using the docker api ensure we handle rootless docker properly
34+ """
35+ if socket_path := environ .get ("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE" ):
36+ return socket_path
37+
38+ client = docker .from_env ()
39+ try :
40+ return client .api .get_adapter (client .api .base_url ).socket_path
41+ except AttributeError :
42+ return "/var/run/docker.sock"
43+
44+
2745MAX_TRIES = int (environ .get ("TC_MAX_TRIES" , 120 ))
2846SLEEP_TIME = int (environ .get ("TC_POOLING_INTERVAL" , 1 ))
2947TIMEOUT = MAX_TRIES * SLEEP_TIME
3048
3149RYUK_IMAGE : str = environ .get ("RYUK_CONTAINER_IMAGE" , "testcontainers/ryuk:0.8.1" )
3250RYUK_PRIVILEGED : bool = environ .get ("TESTCONTAINERS_RYUK_PRIVILEGED" , "false" ) == "true"
3351RYUK_DISABLED : bool = environ .get ("TESTCONTAINERS_RYUK_DISABLED" , "false" ) == "true"
34- RYUK_DOCKER_SOCKET : str = environ . get ( "TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE" , "/var/run/docker.sock" )
52+ RYUK_DOCKER_SOCKET : str = get_docker_socket ( )
3553RYUK_RECONNECTION_TIMEOUT : str = environ .get ("RYUK_RECONNECTION_TIMEOUT" , "10s" )
3654TC_HOST_OVERRIDE : Optional [str ] = environ .get ("TC_HOST" , environ .get ("TESTCONTAINERS_HOST_OVERRIDE" ))
3755
0 commit comments